删除有序数组中的重复项

1.题目

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

示例:

输入:nums = [1,1,1,2,2,3]
输出:5, nums = [1,1,2,2,3]
解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 不需要考虑数组中超出新长度后面的元素。

示例:

1
2
3
输入:nums = [0,0,1,1,1,1,2,3,3]
输出:7, nums = [0,0,1,1,2,3,3]
解释:函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。 不需要考虑数组中超出新长度后面的元素。

2.分析

​ 使用双指针,一根指针指单个不同的数,一个指针如果相同就移动。

3.代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public int removeDuplicates(int[] nums) {
int[] temp = new int[nums.length];
int i = 0 ,j = 0,count=0;
while(j+i<nums.length) {
if(nums[i+j]==nums[i]) {
if(j<2) {
temp[count] = nums[i];
count++;
}
j++;
}else{
i=i+j;
j=0;
}
}
for (int k = 0; k < count; k++) {
nums[k]=temp[k];
}
return count;
}
}