LeetCode 26删除排序數組中的重複項
- 題目簡述:給定一個排序數組,你需要在原地删除重複出現的元素,使得每個元素隻出現一次,傳回移除後數組的新長度。不要使用額外的數組空間,你必須在 原地 修改輸入數組 并在使用 O(1) 額外空間的條件下完成。
-
輸入:nums = [1, 1, 2] 輸出:2 (修改後的數組是[1,2])
輸入:nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] 輸出:5 (修改後的數組是[0, 1, 2, 3, 4])
- 思路:利用雙指針周遊數組,令指針
指針k = 0,
開始周遊,如果遇到i=1
和nums[i]
不相等,則說明找到新元素,将nums[k]
, 然後進行指派k++
,指針nums[k] = nums[i]
随着指針k
不斷向前移動,直到i
指向末尾。最後i
就是修改後的數組元素個數。僅周遊一遍時間複雜度k+1
O(n)
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int n = nums.size();
if(!n) return n;
int k = 0;
for(int i = 1; i < n; i++)
{
if(nums[i] != nums[i-1])
{
k++;
nums[k] = nums[i];
//nums[++k] = nums[i];//上兩句等價寫法
}
}
return k + 1;
}
};