labuladong的算法秘籍-讀書筆記-雙指針技巧秒殺七道數(shù)組題目
雙指針:主要分為兩類
1、左右指針 兩個(gè)指針相向而行或者相背而行
2、快慢指針 兩個(gè)指針同向而行,一快一慢
一、快慢指針技巧
原地修改數(shù)組
力扣23題、原地刪除有序數(shù)組的重復(fù)項(xiàng)
使用快慢指針,快指針在面前,如果遇到不等于慢指針的數(shù),慢指針前進(jìn)一步,將快指針的值與慢指針
交換,然后繼續(xù)往下走。直到數(shù)組結(jié)束,數(shù)組到慢指針?biāo)诘乃饕褪遣恢貜?fù)的項(xiàng)
力扣83題、原地刪除有序鏈表的重復(fù)項(xiàng),解決方法同上
力扣27題、原地移除重復(fù)元素
使用快慢指針,慢指針指向索引0,快指針指向索引0,遍歷數(shù)組,如果快指針?biāo)跀?shù)不等于指定數(shù),將其值賦予慢指針?biāo)谖恢茫?/p>
然后慢指針先前一步。直到數(shù)組結(jié)束,返回慢指針之后的位置
力扣283題 移動(dòng)零
使用快慢指針,慢指針指向索引0,快指針指向索引0,遍歷數(shù)組,如果快指針?biāo)跀?shù)不等于指定數(shù),將其與慢指針交換位置,
然后慢指針先前一步。直到數(shù)組結(jié)束。
二、滑動(dòng)窗口技巧
滑動(dòng)窗口框架
三、左右指針常用算法
二分查找
力扣167題 兩數(shù)之和
左右指針一個(gè)指向頭,一個(gè)指向尾。如果左不等于右執(zhí)行判斷左右所處數(shù)值相加是否為目標(biāo)值。如果是,直接返回左右索引+1。
如果小于目標(biāo)值,左指針左移。如果大于目標(biāo)值,右指針左移。
只要數(shù)組有序,就應(yīng)該想到雙指針技巧
反轉(zhuǎn)數(shù)組
使用左右指針,左指針為0,右指針為數(shù)組長度減一。如果左不等于右,左右位置互換,左++,右--
回文串判斷
使用左右指針,左指針為0,右指針為數(shù)組長度減一。如果左不等于右。判斷左右所在字符是否相等,不等返回false
力扣題5,最長回文字串
使用左右指針,從0開始遍歷字符串,找到以索引為中心的回文串以及以該索引到索引加1為中心的字符串。判斷哪個(gè)更大。
鏈表字串?dāng)?shù)組題、用雙指針別猶豫
雙指針家三兄弟,各個(gè)都是萬人迷
快慢指針最神奇,鏈表操作無壓力
歸并排序找中點(diǎn),鏈表成環(huán)搞判定。
左右指針最常見,左右兩端相向行。
反轉(zhuǎn)數(shù)組要靠它,二分搜索是弟弟。
滑動(dòng)窗口老猛男,字串問題全靠它。
左右指針滑窗口,一前一后齊頭進(jìn)。
具體代碼可以見我的知乎文章
https://zhuanlan.zhihu.com/p/601706960