leetcode題解 雙指標問題

2021-10-09 13:19:35 字數 1142 閱讀 2777

雙指標問題總結:

移除元素

給你乙個陣列 nums 和乙個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後陣列的新長度。

不要使用額外的陣列空間,你必須僅使用 o(1) 額外空間並 原地 修改輸入陣列。

元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。

示例 1:

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

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

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

解答:雙指標:

思路既然問題要求我們就地刪除給定值的所有元素,我們就必須用 o(1)o(1) 的額外空間來處理它。如何解決?我們可以保留兩個指標 i和 j,其中 i 是慢指標,j 是快指標。

演算法當 nums[j]與給定的值相等時,遞增 j 以跳過該元素。只要 nums[j]不等於val,就把nums[j]賦值給nums[i],並同時遞增兩個索引。重複這一過程,直到 j 到達陣列的末尾,該陣列的新長度為 i。

class

solution

}return i;

}}

刪除排序陣列中的重複項

給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。

不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o(1) 額外空間的條件下完成。

示例 1:

給定陣列 nums = [1,1,2],

函式應該返回新的長度 2, 並且原陣列 nums 的前兩個元素被修改為 1, 2。

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

解答:陣列完成排序後,我們可以放置兩個指標 i 和 j,其中 i 是慢指標,而 j 是快指標。只要 nums[i] = nums[j],我們就增加 j 以跳過重複項。

當我們遇到 nums[j] =nums[i] 時,跳過重複項的執行已經結束,因此我們必須把它(nums[j])的值複製到 nums[i+1]。然後遞增 i,接著我們將再次重複相同的過程,直到 j 到達陣列的末尾為止。

class

solution

}return i+1;

}}

Leetcode 題解 雙指標

雙指標 有序陣列 字串翻轉 環形鍊錶問題 雙指標主要用於遍歷陣列,兩個指標指向不同的元素,從而協同完成任務。有序陣列的 two sum1 leetcode 167.two sum ii input array is sorted easy input numbers target 9 output ...

leetcode 雙指標專題

題目 4.尋找兩個有序陣列的中位數 解析 通過2個下標來依次比較2個陣列的元素,直到走過的數量達到一半,複雜度 m n 2 答案 double findmediansortedarrays int nums1,int nums1size,int nums2,int nums2size else co...

leetcode雙指標總結

雙指標一般又分為3中應用 判斷鍊錶是否有環 一快一慢 f和 s 相遇的話就是 成環 沒有相遇就是沒成環 判斷鍊錶中環的起點 鍊錶中證明了 f指標一定比慢指標多走n圈環的長度 f s nb f 2 s 可以得到 s nb 這個時候 如果再走鍊錶起點到環起點的a步的話 也就是 環的起點 所以我們用f指標...