給你一個有序數組?nums
?,請你?原地?刪除重復出現的元素,使得出現次數超過兩次的元素只出現兩次?,返回刪除后數組的新長度。
不要使用額外的數組空間,你必須在?原地?修改輸入數組?并在使用 O(1) 額外空間的條件下完成。
說明:
為什么返回數值是整數,但輸出的答案是數組呢?
請注意,輸入數組是以「引用」方式傳遞的,這意味著在函數里修改輸入數組對于調用者是可見的。
你可以想象內部操作如下:
// nums 是以“引用”方式傳遞的。也就是說,不對實參做任何拷貝
int len = removeDuplicates(nums);// 在函數里修改輸入數組對于調用者是可見的。
// 根據你的函數返回的長度, 它會打印出數組中 該長度范圍內 的所有元素。
for (int i = 0; i < len; i++) {print(nums[i]);
}
思路一:模擬題意
int removeDuplicates(int* nums, int numsSize){if (numsSize == 0) return false;int j=1,k=1;for (int i=1;i<numsSize;i++){if (nums[i] != nums[i-1]){nums[k++] = nums[i];j = 1; }else{j++;if (j == 2){nums[k++] = nums[i];}}}return k;
}
分析:
本題已經將數組內數排列好了,可以考慮直接對每個相同的數進行計數,當記的數超過2時放置后面的數,多的重復數則不放入數組并被后面數代替。
總結:
本題涉及數組應用,將重復數代替即可解決,注意題目所給空間復雜度為O(1)