**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...