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年,最喜歡做的是那種協議清晰,需求明確,並且硬體所允許的靈活性比較小的專案。最煩的乙個是修改別人的老的專案,因為這類專...