题目
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
我的思路
一开始读题就出现了偏差,看到说明后对题的理解也没理解对。
后来看了题解才真明白题面是什么意思。
代码
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int pointer_f = 0, pointer_repeat =1;
if (nums.size()==0){
return 0;
}
// if (nums.size()==1){
// return 1;
// }
while(pointer_repeat<nums.size()){
if (nums[pointer_f]!=nums[pointer_repeat]){
nums[pointer_f+1] = nums[pointer_repeat];
pointer_f++;
}
pointer_repeat++;
}
return pointer_f+1;
}
};
官方题解也是这个思路,但是由于给的是Java的代码,这里就不列出了。
反思
题解中这个“双指针”的处理方法就很直观很容易理解,我自己想的时候就没有想到。
我在代码中还多加了一个if判断条件,后来才发现根本不需要。对于边界条件的设置还是不够熟练。
快学c++吧,其中一个“nums.size()”搞了我半天,这些常用的东西还没学到手。