删除排序数组中的重复数字

题意

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。

不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。

样例

给出数组nums =[5,6,8,9,9,10],你的函数应该返回长度5,此时nums = [5,6,8,9,10]

思路

用 2 个指针,一个指有效元素的长度,一个从前向后扫,跳过重复的元素,将不重复的元素依次放到数组前方,最后返回有效元素的长度即可。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Solution {
/**
* @param A: a array of integers
* @return : return an integer
*/
public int removeDuplicates(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int size = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[size] != nums[i]) {
nums[++size] = nums[i];
}
}
return size + 1;
}
}

原题地址

LintCode:删除排序数组中的重复数字