雙指標技巧

2021-09-12 09:06:04 字數 755 閱讀 3115

我們通過迭代陣列來解決一些問題。通常,我們只使用從第乙個元素開始並在最後乙個元素結束的乙個指標來進行迭代。 但是,有時候,我們可能需要同時使用兩個指標來進行迭代。

例如:翻轉陣列中的元素

void reverse(vector &nums) 

}

總之,使用雙指標技巧的典型場景之一是你想要從兩端向中間迭代陣列。這時你可以使用雙指標技巧:

乙個指標從始端開始,而另乙個指標從末端開始。值得注意的是,這種技巧經常在排序陣列中使用。

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

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

現在讓我們重新考慮空間受到限制的情況。 我們可以採用類似的策略,我們繼續使用兩個指標:乙個仍然用於迭代,而第二個指標總是指向下一次新增的位置。

int removeelement(vector& nums, int val) 

}return k;

}

總結

這是你需要使用雙指標技巧的一種非常常見的情況:同時有乙個慢指標和乙個快指標。

解決這類問題的關鍵是確定兩個指標的移動策略。與前乙個場景類似,你有時可能需要在使用雙指標技巧之前對陣列進行排序,也可能需要運用貪心想法來決定你的運動策略。

雙指標技巧總結

我把雙指標技巧再分為兩類,一類是 快慢指標 一類是 左右指標 前者解決主要解決鍊錶中的問題,比如典型的判定鍊錶中是否包含環 後者主要解決陣列 或者字串 中的問題,比如二分查詢。一 快慢指標的常見演算法 快慢指標一般都初始化指向鍊錶的頭結點 head,前進時快指標 fast 在前,慢指標 slow 在...

雙指標技巧彙總

源自 labuladong 鍊錶指標陣列題,用雙指標別猶豫 快慢指標最神奇,鍊錶操作無壓力 歸併排序找中點,鍊錶成環搞判定 左右指標很常見,左右兩端向前行 反轉陣列要靠他,二分查詢是弟弟 2.已知鍊錶中含有環,返回這個環的起始位置 3.尋找鍊錶的中點 4.尋找鍊錶的倒數第 k 個元素 二 左右指標 ...

雙指標技巧總結

141.環形鍊錶 141.環形鍊錶ii 167.兩數之和 ii 輸入有序陣列 我把雙指標技巧再分為兩類,一類是 快慢指標 一類是 左右指標 前者解決主要解決鍊錶中的問題,比如典型的判定鍊錶中是否包含環 後者主要解決陣列 或者字串 中的問題,比如二分查詢。快慢指標一般都初始化指向鍊錶的頭結點 head...