太笨了,太笨了
解法:只需把不重复的元素放前面
public int removeDuplicates(int[] nums) {
if (nums.length == 0) {
return 0;
}
if (nums.length == 1) {
return nums[0];
}
//双指针
int left = 0;
int right = 1;
while (right < nums.length) {//右指针一直往下找与当前元素不一样的
if (nums[left] != nums[right]) {//找到不一样的就
nums[++left] = nums[right];//将当前left执行的下一位改为right找到的
}
right++;
}
return left+1;
}
为什么这样做?
1.有序数组,每个元素只出现一次。就算有重复的,后面的不会出现前面的,前面的不会出现后面的。
2.要求原地修改,但是也不好操作,最简单的方法就是找到不同的元素,right负责往下找和left不同的元素,然后再放到当前left指向元素的下一位,这样不同元素紧挨着,找完即可,其余的不需要管,因为一不重复,二返回的是长度。