同向雙指標演算法題總結

2021-10-01 23:27:15 字數 2048 閱讀 3479

同向雙指標是經常考的一種題型;

什麼時候用?

發現題目,兩個指標,只要固定乙個,另外乙個掃瞄,總是有壞壞壞,突然變好,不再回來

或者好好好,忽然變壞,不再回來,那麼就是同向雙指標演算法,基本上都是o(n)的演算法複雜度;

寫程式注意的點:

固定i,i是主指標每次走一步,寫for迴圈,j是輔指標,寫while迴圈,每次可能走n步;三部分組成;

class solution 

int cursum = 0;

int j = 0;

int result = integer.max_value;

for(int i = 0; i < nums.length; i++)

// update result;

if(cursum >= s)

// move i;

cursum -= nums[i];

}return result == integer.max_value ? 0 : result;

}}

minimum size subarray sum (經典的同向雙指標的模板; 注意 update res的時候,很少用 j指標來判斷的,都是以滿足區間的條件來判斷)

minimum window substring (也是同向雙指標,只是多了個count char的過程,注意要count的數目滿足了target裡面char的數目才算集齊一種char;後面i挪動的時候,也要去掉char count同時需要判斷是否少於target char count,代表少集齊一種char;)

sliding window median (priorityqueue的題,參考 prioritqueue總結)

sliding window maximum (單調棧的題,參考單調棧總結)

longest substring without repeating characters (同向雙指標, i是主指標,j是輔指標;主指標寫for迴圈,j一直移動寫while迴圈;當移動到有重複值的時候,update len (j-i), 注意 int count array 的index就是char;)

longest substring with at most k distinct characters (跟

longest substring with at most two distinct characters

.思路一模一樣。i是主指標,j是輔指標,然後模板套起來,注意要判斷如果即將要大於k的時候,j停下來,不做任何事情,update res,然後i++;)

longest substring with at most two distinct characters (跟上題一模一樣,只是把k變成2即可;)

longest substring with at least k repeating characters. 這用雙指標來做;因為unique char可以有1,2,3,。。。26個可能性,那麼可以把問題分解為26個不同維度的小問題,求uniquechar 是m個,同時出現次數不小於k的最長substring 長度,那麼26 * n就可以完成。核心思想就是; uniquenum是個給定的數1,2,3,4,5...26, 我要求的是countnum == uniquenum,同時我也記錄一下nolessthank的數目,如果同樣等於 unqiuenum,證明我找到乙個candidate; 然後求這26個unique char的最大值,o(26*n) = o(n);

find all anagrams in a string 思路:同向雙指標,注意check收集到的東西是否相等,要check兩個count array是否頻率一致;而且判斷是否收集滿了,是以pcount為標準,而不是以0為標準;

max consecutive ones iii 思路:典型的同向雙指標題目,count最長的區間使得最多含有k個0; 注意等於k的時候,如果還是1,還是可以繼續走的;所以是<=k, time: o(n)

********** 同向雙指標還有高階題目 **********

參考:同向雙指標高階題總結

刷題計畫 雙指標演算法(一)

leetcode上的一些能用雙指標辦法解決的演算法題題解 86.分割鍊錶 中等 題目 給定乙個鍊錶和乙個特定值 x,對鍊錶進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3輸出 1 2 ...

leetcode刷題 演算法(1) 雙指標

167.two sum ii input array is sorted easy 633.sum of square numbers easy 注意 大數,以及臨界情況 345.reverse vowels of a string easy 注意 大寫情況 680.valid palindrome...

雙指標演算法題 三數之和

給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 請你找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 這道題是典型的雙...