160. 相交鏈表
我的思路
先到空的node轉向另一個鏈表重新開始。
然後根據誰是空的走到另一邊也走到空爲止,此時兩個節點在同一起跑線
再相遇就是相交點或者大家都爲空了
題解思路
我在判斷誰先走到nullptr
上寫了大量代碼處理.其實大家都是各自走自己的一遍,對方的一遍到達空
while (nodeA != nodeB) {
if (nodeA != nullptr) {
nodeA = nodeA -> next;
}
else {
nodeA = headB;
}
if (nodeB != nullptr) {
nodeB = nodeB -> next;
}
else {
nodeB = headA;
}
}
某一刻爲空時我們就走上了對方走過的路.
"錯的人遲早會走散,而對的人終會相逢"
這TM
就是代碼的浪漫嗎
155. 最小棧
我原來的思路是用隊列或者哈希表什麼的來模擬一個棧。結果告訴我搞一個同一數據結構的輔助棧就可以了...
題解思路
使用輔助棧存放最小元素
1.如果不小於最小元素,assistantstack就push. st.top <= ast.top
注意:等於的時候ast
也push
2.pop
:不大於就pop. ast.top <= st.top
152. 乘積最大子數組
題解思路
當前乘積max有三個可能,一個是dpmax[i - 1] * nums[i]
nums[i]
dpmin[i - 1] * nums[i]
for (int i = 1; i < len; ++i) {
int premax = maxnum, premin = minnum;
maxnum = max(nums[i], max(premax * nums[i], premin * nums[i]));
minnum = min(nums[i], min(premin * nums[i], premax * nums[i]));
ans = max(ans, maxnum);
}
需要注意的地方:還需要比較nums[i]
是爲了消除0的影響[2,3,0,4,4,4]
幫助災後重建.否則0後大家都是0了
148. 排序鏈表
題解思路
分爲兩個方法
1.將當前鏈表拆成長度相似的兩個,分別排序
2.合併有序鏈表
146. LRU 緩存機制
題解思路
查找和獲得使用哈希表就能實現O(1)的複雜度,但是不能實現長時間未使用的在最後,鏈表能夠處理的了這個問題,但是單向無法記錄最後的指針,所以使用雙向鏈表