100. 删除排序数组中的重复数字

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。

不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。

样例

给出数组A =[1,1,2],你的函数应该返回长度2,此时A=[1,2]

这种简单难度的题要训练到第一时间想到解法,先上一个丑的不行的解法

 1 int removeDuplicates(vector<int> &nums) {
 2         // write your code here
 3         if(nums.empty()){
 4             return 0;
 5         }
 6         vector<int>::iterator it=nums.begin();
 7         vector<int>::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<int> &nums) {  
 2         if(nums.empty()) return 0;    
 3         int count=0;  
 4         for(int i=1;i<nums.size();i++){  
 5             if(nums[i]!=nums[count]){  
 6                 count++;
 7                 nums[count]=nums[i];  
 8             }  
 9         }  
10         nums.resize(count+1);   
11         return count+1;  
12     } 

count+1内的数组是结果,将>=count的数覆盖进count,然后删除多余的。

原文地址:https://www.cnblogs.com/TheLaughingMan/p/8203729.html