LeetCode演算法學習筆記 雙指標技巧彙總

2021-10-09 19:33:01 字數 1170 閱讀 5162

左右指標的常用演算法

主要解決鍊錶問題,快慢指標初始化都在鍊錶的頭結點head,前進時指標fast在前,慢指標slow在後。

若煉表中不含有環,則指標最終會遇到空指標null表示鍊錶到頭。

若含有環,經典解法就是用兩個指標,乙個每次前進兩步,乙個每次前進一步。如果不含有環,則跑得快的那個最終會遇到null;如果含有環,快指標最終會超慢指標一圈,和慢指標相遇。

boolean

hascycle

(listnode head)

return

false

;}

當快慢指標相遇時,讓其中任乙個指標重新指向頭結點,然後讓他們以相同速度前進,再次相遇時所在的節點就是環開始的節點。

listnode detectcycle

(listnode head)

slow=head;

while

(slow!=fast)

return slow;

}

快指標一次前進兩步,慢指標一次前進一步,等到快指標到達鍊錶的盡頭時,慢指標就處於鍊錶中間位置。

listnode middle

(listnode head)

return slow;

}

使用快慢指標,讓快指標先走k步,然後快慢指標開始同速前進,這樣當快指標走到鍊錶末尾null時,慢指標所在的位置就是倒數第k個鍊錶節點。

listnode searchk

(listnode head)

while

(fast != null)

return slow;

}

int

binary_search

(int

nums,

int target)

else

if(nums[mid]

else

if(nums[mid]

>target)

}return-1

;}

void

reverse

(int

nums)

}

見下篇

演算法學習記錄 雙鏈表

單鏈表缺點是每次都要從頭開始索引,不能往回索引,很自然就會想乙個辦法,希望能夠往回索引。這有雙鏈表就產生了。0.雙鏈表結構 typedef struct lnodeltnode,ptnode 增加了乙個前驅指標,這有就可以向回索引了。1.雙鏈表的初始化 1.雙向鍊錶的init void dlist ...

LeetCode 演算法學習 2

longest substring without repeating characters given a string,find the length of the longest substring without repeating characters.example 1 input ab...

演算法 學習筆記

1.輸入輸出演算法至少有乙個或多個輸出 2.有窮性 3.確定性 4.可行性 1.正確性a.演算法程式沒有語法錯誤 b.演算法程式對於合法的輸入資料能夠產生滿足要求的輸出結果 c.演算法程式對於非法的輸入資料能夠得出滿足規格說明的結果 d.演算法對於精心選擇的,甚至刁難的測試資料都有滿足要求的輸出結果...