问题描述
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this in place with constant memory.
For example,
Given input array nums = [1,1,2],
Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn’t matter what you leave beyond the new length.
思路
这道题比较简单。我们可以将不重复的序列存到数列前面,因为不重复序列的长度一定小于等于总序列,所以不用担心覆盖的问题。然后用两个指针,第一个指针指向当前数组遍历到的位置,第二个指针指向不重复序列下一个存放的位置。并且记录上一次遍历过的数,用来比较当前遍历到的数是否与之相等。如果不相等,则说明不与之前遍历过的数重复,因为数组是有序的。然后将它放到不重复序列那里。代码如下:
public int removeDuplicates(int[] nums) {
if(nums.length == 0) return 0;
int lastread = nums[0];
int end = 1;
for(int i=1;i<nums.length;i++){
if(lastread != nums[i]){
lastread = nums[i];
nums[end] = nums[i];
end++;
}
}
return end;
}