leetcode刷題技巧之雙指標技巧

2021-09-26 10:23:41 字數 1161 閱讀 9568

雙指標技巧的情形一:使用兩個指標來完成對陣列的迭代,乙個從始端開始,乙個從終端開始

例如:反轉陣列[1,2,3,4,5,6,7]

void

reverse

(int

*v,int n)

}

總結:在需要使用兩端向中間迭代陣列的時候或是說乙個指標從始端開始,而另乙個指標從末端開始,我們可以使用這種雙指標技巧。注意這種技巧常使用在排序陣列中,如下習題可供練習:

1、反轉字串

2、陣列拆分

3、兩數之和ⅱ-輸入有序陣列

雙指標技巧的情形2:使用兩個快慢指標來解決問題

例如:給定乙個陣列和乙個值,原地刪除該值的所有例項並返回新的長度。

給定 nums = [3,2,2,3], val = 3,

函式應該返回新的長度 2, 並且 nums 中的前兩個元素均為 2。

你不需要考慮陣列中超出新長度後面的元素

如果我們沒有空間複雜度上的限制,那就更容易了。我們可以初始化乙個新的陣列來儲存答案。如果元素不等於給定的目標值,則迭代原始陣列並將元素新增到新的陣列中。

實際上,它相當於使用了兩個指標,乙個用於原始陣列的迭代,另乙個總是指向新陣列的最後乙個位置。

重新考慮空間限制

我們可以採用類似的策略,我們繼續使用兩個指標:第乙個指標用於迭代,而第二個指標用於指向下一次新增的位置。 參考**如下:

int

removeelement

(vector<

int>

& nums,

int val)

}return k;

}

雙指標技巧的情形三:左右指標,也就是滑動視窗的思想

滑動視窗總結

總結:對於此類問題需確定兩個指標的移動策略。

可供練習的題目:

1、移除元素

2、 最大連續1的個數

3、長度最小的子陣列

leetcode刷題 雙指標

使用雙指標,乙個指向最左邊,乙個指向最右邊,判斷與目標target的大小關係 public int twosum int numbers,int target else if numbers l numbers r else return newint 0 題目 給定乙個非負整數 c 你要判斷是否存...

leetcode刷題 雙指標

給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 index1 和 index2 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不可以重複使...

leetcode刷題 演算法(1) 雙指標

167.two sum ii input array is sorted easy 633.sum of square numbers easy 注意 大數,以及臨界情況 345.reverse vowels of a string easy 注意 大寫情況 680.valid palindrome...