• 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,然后删除多余的。

  • 相关阅读:
    view 的继承关系
    dos 下小tip
    Required diagnostic data collection for RMAN backup
    数据库应用设计设计报告
    程序 从存储卡 内存卡 迁移到 SD卡
    c++ 参赛设置
    c++ 用构造函数
    Ip
    error C3872: “0x3000”: 此字符不允许在标识符中使用
    机器字长 32位与64位的区别
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8203729.html
Copyright © 2020-2023  润新知