題目
- 删除排序數組中的重複項 II
給定一個排序數組,你需要在原地删除重複出現的元素,使得每個元素最多出現兩次,傳回移除後數組的新長度。
不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。
示例 1:
給定 nums = [1,1,1,2,2,3],
函數應傳回新長度 length = 5, 并且原數組的前五個元素被修改為 1, 1, 2, 2, 3 。
你不需要考慮數組中超出新長度後面的元素。
示例 2:
給定 nums = [0,0,1,1,1,1,2,3,3],
函數應傳回新長度 length = 7, 并且原數組的前五個元素被修改為 0, 0, 1, 1, 2, 3, 3 。
你不需要考慮數組中超出新長度後面的元素。
分析
- 定義一個cur指針,跟随周遊,
nums[cur++]=nums[i]
- 如果沒有出現重複兩次的,cur就會與i一直相等
- 如果出現了,cur就會不變,i++,就相當于删除了重複的元素
代碼
public int removeDuplicates(int[] nums) {
int length = nums.length;
if (length <= 2)
return length;
int cur = 2;
for (int i = 2; i < length; i++) {
if (nums[i] != nums[cur - 2]) {
nums[cur++] = nums[i];
}
}
return cur;
}
後記
傳送門 ===>>