雙指標與滑動陣列演算法總結

2021-10-10 22:57:11 字數 1302 閱讀 7268

**1.左右指標

例題:反轉鍊錶

class

solution

return pre;}}

;

2.對撞指標(解決有序陣列的數字之和或反轉陣列之類的可以兩邊開工的問題)模板:指定指標初始位置,設定指標移動方法,給定結束條件。

例題:反轉陣列

class

solution}}

;

3.快慢指標(兩個指標移動速度不一樣)**

解決問題:移除元素;判斷鍊錶是否含有環;已知鍊錶有環,返回環的起始位置;尋找鍊錶中點;尋找鍊錶倒數第k個元素;

模板:1.初始位置:慢指標指向第乙個元素位置,快指標指向下乙個元素位置

2.移動方法:慢指標步數加一,快指標步數加二(反正兩個指標的速度要不同)

3.結束條件:兩指標重合或快指標先到達終點。

例題:環形鍊錶

class

solution

return

false;}

};

原理:將雙層迴圈變為單層變數迴圈問題,使兩個指標一左一右構成乙個視窗.

解決問題:陣列,字串的子元素,字串的問題,例如找到滿足xx的最x的區間的xx ,滿足查詢一定條件的連線區間的性質

模板:初始化left=-1,right=0;[left,right]稱為乙個視窗

指標移動方法:不斷增加right,直到視窗字串符合要求,停止增加right,增加left縮減視窗直到不符合要求

例題:最長回文字串

所謂回文字串,就是乙個字串從左往右讀和從右往左讀是完全一樣的,例如:「a」,「aba」,"abcddcba"是回文字串,"dffgd"則不是。

本題採用中心擴充套件的方法,即把給定的字串的每乙個字母當做中心,向兩邊擴充套件,但要考慮奇數和偶數。

string findlongestpalindrome

(string &s)

//向兩邊擴散,j和k包含的元素構成乙個滑動視窗,依次擴大視窗

j--; k++;}

}for

(int i=

0;i)//長度為偶數

j--; k++;}

}if(maxlength>0)

return s.

substr

(start,maxlength)

;return

null

;}

雙指標之滑動視窗總結

這個星期做的都是有關雙指標和滑動視窗的有關leecode題。同樣有點小感悟,這裡小小總結一下雙指標中的滑動視窗部分。對於給定字串求其某個符合一定條件的子串的問題,最簡單的方法就是暴力的兩層迴圈,它的時間複雜度至少是o n2 一般條件下,這樣的複雜的往往都會因為超時而 over 相對來說,如果能對暴力...

雙指標到滑動視窗

1 判定鍊錶中是否含有環 解析 定義兩個指標,一快一慢。如果有環,則會相遇。boolean hascycle listnode head return false 2 已知鍊錶中含有環,返回這個環的起始位置 解析 快指標走了2k步,慢指標走了k步。多的k步就是環的長度。假設相遇點距離環起始位置m步,...

golang 雙指標滑動區間

雙指標通常在滑動區間演算法中使用,與kmp盡可能的復用已計算的資訊思想一致。給定乙個二進位制陣列,計算其中最大連續1的個數。輸入陣列的長度是正整數,且不超過 10,000。輸入 1 1,0 1,1 1 輸出 3解釋 開頭的兩位和最後的三位都是連續1,所以最大連續1的個數是 3.func findma...