雙指標一般又分為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.接...