码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-01-05 15:27:39      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:长度   简单   ica   vector   class   ext   else   write   第一个   

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

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

样例

给出数组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,然后删除多余的。

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

标签:长度   简单   ica   vector   class   ext   else   write   第一个   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!