原创 阿里筆試2:求最長非遞減字符長度

首先這個題目我自己是做錯了的,最後AC是0.1,和沒有一樣(香菇…),但是思路上是對的,只是這應該是個動態規劃問題,我做成了BFS的問題了。 動態規劃 題意 首先定義非遞減字符串,然後給n個非遞減字符串,選擇任意個拼起來,問能拼

原创 《劍指offer》:機器人的運動範圍

這個題目就是典型的深度優先遍歷,或者說回溯法。就是在運動過程中記住訪問過的狀態,然後每到一個點 如果點超出了邊界直接return 如果訪問過這個點直接return 如果點不滿足我們的條件也return, 最後如果滿足則計數器加

原创 《劍指offer》:最小的K個數

這個題目的話,單純看題目的名字就知道利用堆可以去解決。但是先講一下另一種思路,就是將所有元素記錄到自己的位置上,這樣元素就會默認的從小到大進行排列,然後就可以找到了。代碼如下: public ArrayList<Integ

原创 leetcode_106:相交鏈表

1.計數法 我們知道如果兩個鏈表listA和listB,長度分別爲lengthA和lengthB,則一個較長的節點只需要先走lengthA-lengthB步,就能保證他倆在某個地方相遇。代碼如下: public ListNode

原创 《劍指offer》:調整數組順序使奇數位於偶數前面

首先這個題目有一個點要注意,就是不能更換同類型數據之間的相對順序。如果沒有這個限制的話,我們的代碼可以使用兩個指針分別從最左和最右向中間靠攏,然後遇到不符合的相互交換即可,代碼如下: public class Solution {

原创 leetcode_23:合併K個排序鏈表

一、暴力法 暴力法不用做太多解釋,代碼也不寫了,主要是兩個暴力法: 每次都合併兩個鏈表到一個上面,再用這個新鏈表繼續和另一個鏈表進行合併。這樣需要合併n-1次。 逐一比較的方法,就是每次從這K個鏈表的頭結點中選一個最小的,然後加

原创 《劍指offer》:刪除鏈表中重複的結點

這個題目就是考察的邊界條件,方法上沒什麼特別的。我們仍然要注意的是,遇到鏈表題目時,最好幾個僞頭結點。 public ListNode deleteDuplication(ListNode pHead) {

原创 leetcode_79:單詞搜索

這個題目就是典型的回溯法,然後我只會用一種比較耗時的回溯法,主要耗時或者耗費內存的地方在於對於訪問標誌數組的創建,因爲每次走都是要新建一個訪問標誌數組的: public boolean exist(char[][] boa

原创 《劍指offer》:字符流中第一個不重複的字符

這個題目的話其實是可以想到利用一個128大小數組來保存字符出現的次數,只是如果我們要找第一個時,每次都需要從頭開始遍歷,直到找到一個次數爲1的則立即返回。那麼我們可不可以簡化這個遍歷的過程?當我們遇到一個字符時,如果是第一次出現我

原创 《劍指offer》:連續子數組的最大和

這個題目就是典型的動態規劃問題,也就是對於當前的元素num[i],如果它前面相鄰的連續和flag[i-1]>0,那麼它的最大連續和就是num[i]+flag[i-1];如果flag[i-1]<0,那麼它的最大連續和就是本身num[

原创 《劍指offer》:數組中重複的數字

首先我們可以使用排序,然後再判斷每兩個相鄰元素是否相等就行了。 當然還可以使用一個HashSet來存儲所有元素,當添加元素時判斷Set中有沒有,有則說明有重複的元素存在。 簡單解法 因爲題目規定的是數組長度爲n,且數字都在0-n-

原创 leetcode_128:最長連續序列

1. 雙向尋找 我也不知道我這種解法具體叫什麼,思路就是: 先把所有數字放到一個HashSet裏 然後對裏面的每個數據都去雙向的擴展,然後在HashSet裏面去找 查找的過程記錄下數量,同時從HashSet裏刪除避免重複查找 最

原创 leetcode_703:數據流中的第K大元素

這個題目反正我是隻通過了九個測試用了,而且感覺自己的好像還挺對的。但是最後那個很長的就是通不過,說一說思路吧。這個題目一看就能看出來,使用小根堆。代碼如下: class KthLargest { //維持一個大小爲k的最小

原创 leetcode_71:簡化路徑

此題主要考察的是棧,所以定義一個輔助棧; 先把字符串以"/“爲分隔符分割成數組,此時數組有 [“路徑”],[”"],["."],["…"]這四種情況; 遍歷數組,當s[i].equals("…")並且棧不空時pop,當!s[i]

原创 《劍指offer》:之字形打印二叉樹

也不難的題目,就是判斷每層是奇數層還是偶數層,然後偶數層的時候要將順序進行翻轉即可。代碼如下: class Solution { public List<List<Integer>> levelOrder(TreeNode