leetcode刷題記錄

2021-10-10 13:38:51 字數 1741 閱讀 7841

對應劍指offer刷題記錄,leetcode也來個。

1.27. 移除元素

這道題主要考點是雙指標,我自己的思路是,定義兩個指標,將需要移除的元素移到陣列的最後,同時移動low指標,代表陣列此時的大小,**如下:

class solution 

}return i;}}

其實還有一種指標,就是快慢指標,並不是像上面這樣指向陣列兩端的,如下題 

2.27. 移除元素

class solution  else 

}//因為i代表了最後乙個數字的索引,所以陣列的實際大小為i + 1

return i + 1;}}

3.206. 反轉鍊錶

這道題目也可以用雙指標(其實嚴格意義上來說可以算3指標)來做,但是我個人更喜歡用遞迴來。

class solution 

private void recur(listnode head)

recur(head.next);

head.next.next = head;

head.next = null;}}

其實可以直接用當前函式遞迴,**如下:

class solution 

}

4.142. 環形鍊錶 ii

主要也是用雙指標,但是要真正弄懂為什麼採用這樣的過程。

數學推導如下:

slow指標每次只走一步,fast指標走兩步,根據操場跑步經驗,當別人比你跑的快時,他總會在多跑幾圈的情況下追到你。同理fast指標在圓環內總會追到slow指標,設fast指標多跑n圈,在節點2處追到slow指標。

假設此時slow指標此時走過的路程 l1 = s, 則此時快指標走過的路程 l2 = 2l1, 且 l2 = s + nb,兩式聯立解得s = nb;如果我們讓乙個新指標從煉表頭走到節點1,那麼slow指標此時走過的路徑可以是:a + xb(x為任意整數),而此時l1 = s = nb,所以slow指標在相遇節點2再走a步,就可以找到環的入口a。但是此時並不知道a的具體數值,但是我們可以乙個新指標從頭節點出發,當新指標和slow指標相遇時,就是環的入口節點1.

5.1047. 刪除字串中的所有相鄰重複項

這道題目本身不難,用棧即可,但是這道題引出了我乙個思考:增強迴圈遍歷資料結構時,到底是按照什麼順序?

6.347. 前 k 個高頻元素

大頂堆,小頂堆

7 572. 另乙個樹的子樹

這道題目是一道「簡單題」。與劍指offer那道單純的判斷子結構不同,這道題目要求兩個棵樹的子結構也要相同,可以把題目理解為:判斷另一棵樹是否為此書的子結構。

比較容易想到的是遞迴(此題的暴力解法),**如下:

class solution 

private boolean recur(treenode s, treenode t)

}

可以得到兩棵樹的遍歷順序,通過遍歷的序列來判斷是否是子樹。

不過需要注意的是,按照傳統的遍歷方法來,是無法保證得到正確結果的。需要將完全的資訊列印出來才行,葉子節點左右空節點也需要列印出來。

最後通過kmp演算法判斷

8 617. 合併二叉樹

2020/11/28 涉及到兩棵樹同時遞迴的問題

leetcode刷題記錄

我覺得每天來兩道,練習練習,再看看人家是怎麼優化的。1.給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。c 暴力求解,204ms,9.1m class solution for index,num in enumerate ...

LeetCode刷題記錄

動態規劃和貪心演算法的異同點 class solution throw newruntimeexception 時間複雜度 o n 2 對於每個元素,我們試圖通過遍歷陣列的其餘部分來尋找它所對應的目標元素,這將耗費 o n o n 的時間。因此時間複雜度為 o n 2 需要一種方法,尋找符合要求的元...

leetcode刷題記錄

工作之餘刷刷題排解下寂寞 1 面試題66.構建乘積陣列 解題思路 題目要求可以簡化為求陣列中任意乙個元素左右兩邊所有元素的乘積。偷懶就用了乙個套路,練習了p c c python class solution def constructarr self,a list int list int 除法是...