给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。
不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。
样例
给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]。
这种简单难度的题要训练到第一时间想到解法,先上一个丑的不行的解法
1 int removeDuplicates(vector &nums) { 2 // write your code here 3 if(nums.empty()){ 4 return 0; 5 } 6 vector ::iterator it=nums.begin(); 7 vector ::iterator temp; 8 it++; 9 int mark=nums[0];10 while(it!=nums.end()){11 if(*it==mark){12 temp=it;13 it=nums.erase(temp);14 }15 else{16 mark=*it;17 it++;18 }19 }20 return nums.size();21 }
两个指针一前一后,如果后和前一样,删除后,并将后向后移一位。
至少上面这种要第一个想到,下面贴一个美观的
1 int removeDuplicates(vector &nums) { 2 if(nums.empty()) return 0; 3 int count=0; 4 for(int i=1;i
count+1内的数组是结果,将>=count的数覆盖进count,然后删除多余的。