题目:
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.
思路:维护两个指针,一个用来遍历;一个用来储存记录不同元素,把不同的元素按个从0开始存。
代码:
public int removeDuplicates(int[] nums) {
int len = nums.length;
int index=0;
for(int i=1;i<nums.length;i++){
if(nums[i]==nums[index]){
//如果是重复的元素,最后的长度减一
len--;
}else{
//如果是不同的元素,移动index,存放
index++;
nums[index]=nums[i];
}
}
return len;
}
改进:不需要len这个变量,通过index就可以判断最后的长度
public int removeDuplicates(int[] nums) {
int index=0;
for(int i=1;i<nums.length;i++){
if(nums[i]!=nums[index]){
//如果是不同的元素,移动index,存放
nums[++index]=nums[i];
}
}
return index+1;
}