leetcode雙指標總結

2021-10-24 08:20:21 字數 1634 閱讀 8161

雙指標一般又分為3中應用

判斷鍊錶是否有環

一快一慢 f和 s 相遇的話就是 成環 沒有相遇就是沒成環

判斷鍊錶中環的起點

鍊錶中證明了 f指標一定比慢指標多走n圈環的長度

f = s+nb

f = 2*s

可以得到 s = nb

這個時候 如果再走鍊錶起點到環起點的a步的話 也就是 環的起點

所以我們用f指標重新指向鍊錶的起點 再次相遇的地方就是環的起點

一般都是排好序的陣列或鍊錶

二分查詢問題

n數之和問題:比如兩數之和問題,先對陣列排序然後左右指標找到滿足條件的兩個數。如果是三數問題就轉化為乙個數和另外兩個數的兩數問題。以此類推。

四數之和

兩個for迴圈用做外迴圈

用來迴圈 兩個數 碰撞指標 是用來比較大小的

找到合適之後 放入hashmap中去重

class solution ;

arrays.sort(tmp);

collections.addall(arraylist,tmp);

if(!hm.containskey(inttostring(tmp)))

right--;

left++;

}else if(sum 顏色分類

p0 代表 0的右邊界

p2 代表 2 的左邊界

cur代表當前的處理元素

演算法初始化0的最右邊界:p0 = 0。在整個演算法執行過程中 nums[idx < p0] = 0.

初始化2的最左邊界 :p2 = n - 1。在整個演算法執行過程中 nums[idx > p2] = 2.

始化當前考慮的元素序號 :curr = 0.

while curr <= p2 :

若 nums[curr] = 0 :交換第 curr個 和 第p0個 元素,並將指標都向右移。

若 nums[curr] = 2 :交換第 curr個和第 p2個元素,並將 p2指標左移 。

若 nums[curr] = 1 :將指標curr右移。

實現

class solution 

else if(nums[cur] ==1)

else}}

public void swap(int a ,int i,int j)

}

兩個指標,一前一後組成滑動視窗

1、字串匹配問題

2、子陣列問題

992 k 個不同整數的子陣列

這是乙個典型的子陣列問題 結合了hashmap 和 雙指標 和 動態規劃的問題 是一道極其綜合的難題

最小覆蓋子串

滑動視窗問題

LeetCode 雙指標部分總結

主要的方法有 對於單個陣列的雙指標,特別的頭尾指標,特別對於排序陣列,或者其他情況。主要的目的是,不同的情況,只有乙個指標移動,而且兩個指標移動方向相對,指標最後對撞,遍歷結束。比如,15.三數之和的問題,11.盛最多水的容器,75.顏色分類,881.救生艇。對於兩個陣列,特別是字串的比較問題。多是...

雙指標法LeetCode總結

遍歷物件的過程中,使用兩個指標進行操作,實現相應的目的 經典環形鍊錶 leetcode142 待補充適用於有序陣列,設定陣列左索引與陣列右索引 基本流程是 publicf int nums leetcode11 盛水最多的容器 class solution return max leetcode15...

leetcode之雙指標總結(C )

雙指標一般是快慢指標向後移動,或者左右指標向中間移動。雙指標 雙指標法的判定條件都是while left下面是力扣1 150中雙指標的題 9.回文數 11.盛最多水的容器 15.三數之和 16.最接近的三數之和 18.四數之和 26.刪除排序陣列中的重複項 27.移除元素 31.下乙個排列 42.接...