LeetCode Notes 234 回文鍊錶

2022-03-06 10:37:49 字數 1270 閱讀 4538

leetcode

contents

方法2:雙指標+反轉鍊錶

請判斷乙個鍊錶是否為回文鍊錶。

示例 1:

輸入: 1->2

輸出: false

示例 2:

輸入: 1->2->2->1

輸出: true

高階:你能否用 o(n) 時間複雜度和 o(1) 空間複雜度解決此題?

class

solution

int left = 0;

int right = list.size() - 1;

while(left < right)

return

true;

}}

複雜度分析

時間複雜度:o(n)

空間複雜度:o(n)

回文串應該是對稱的,所以我們想辦法找到中間的節點,然後比較前後兩個半段是否是對稱的。

首先利用雙指標法,找到鍊錶最中間的節點(也就是前半段的最後乙個節點),就可以劃分出前半段,後半段。(對於size是奇數的鍊錶,中間的數字算在前半段中,比較的時候也無需比較)

然後將後半段反轉,逐個比較前後半段的每個節點是否相同,如果都相同,說明是對稱的,是回文串。否則,不是回文串。

需要注意的是,這樣的寫法會改變輸入的head鍊錶結構,返回結果之前需要恢復鍊錶結構。

class

solution

//返回結果之前,需要還原輸入的鍊錶

endoffirsthalf.next = reverse(reversedsecondhalf);

return result;

}//反轉鍊錶

private listnode reverse

(listnode head)

//雙指標法找到前半部分的最後乙個節點

//如果鍊錶size為奇數,中間節點算在前半部分

private listnode findmid

(listnode head)

return slow;

}}

複雜度分析

時間複雜度:o(n)

空間複雜度:o(1)

LeetCode Notes 22 括號生成

leetcode contents方法2 回溯 給出括號對數n之後,就確定了括號組合的字串長度必然是2n,我們可以通過暴力遞迴的方式,在2n個位置上放置 或者 得到所有的排列序列,然後逐個判斷每個排列序列是否是正確的,將正確的排列序列加入到結果列表當中。class solution public v...

2 3 tensorflow 2 3學習 向量

自己開發了一 票智慧型分析軟體,功能很強大,需要的點選下面的鏈結獲取 方法說明 tf.range start,limit,delta 1,dtype none,name range 等差序列,包括start,不包括limit,delta是增量,預設1 tf.lin space start,stop,...

考研日誌 23

昨天9點才開始學,學到了11點多一點。dm看完了二元關係的第三節,做了6道題。220 23 4錯了3個,講的是北京的教育系統,感覺挺簡單的,結果錯得不少。這兩天做的專案比較煩,工作1年,最喜歡做的是那種協議清晰,需求明確,並且硬體所允許的靈活性比較小的專案。最煩的乙個是修改別人的老的專案,因為這類專...