題目
題目難度:中等
給定一個排序數組,你需要在原地刪除重複出現的元素,
使得每個元素最多出現兩次,返回移除後數組的新長度。
不要使用額外的數組空間,
你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。
示例 1:
給定 nums = [1,1,1,2,2,3],
函數應返回新長度 length = 5,
並且原數組的前五個元素被修改爲 1, 1, 2, 2, 3 。
你不需要考慮數組中超出新長度後面的元素。
解題
將快指針(當前遍歷的數字)和慢指針指向的數字的前一個數字比較(也就是滿足條件的倒數第 2 個數)。
- 如果相等,因爲有序,所以倒數第 1 個數字和倒數第 2 個數字都等於當前數字,再添加就超過 2 個了。
- 如果不相等,那麼就添加。
class Solution {
public int removeDuplicates(int[] nums) {
int fast = 2;
int slow = 1;
for(; fast < nums.length ;fast++){
if(nums[slow-1] != nums[fast]){
nums[++slow] = nums[fast];
}
}
return slow+1;
}
}