题目来源于 LeetCode 第 26 号问题:删除排序数组中的重复项。题目难度为 Easy,目前通过率为 43.9%。

题目描述

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

题目解析

使用快慢指针来记录遍历的坐标。

  • 开始时这两个指针都指向第一个数字

  • 如果两个指针指的数字相同,则快指针向前走一步

  • 如果不同,则两个指针都向前走一步

  • 当快指针走完整个数组后,慢指针当前的坐标加1就是数组中不同数字的个数

动画描述

动画描述

代码实现

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if (nums.empty()) return 0;
        int pre = 0, cur = 0, n = nums.size();
        while (cur < n) {
            if (nums[pre] == nums[cur]){
              cur++;  
            } else{
                ++pre;
                nums[pre] = nums[cur];
                cur++;
            } 
        }
        return pre + 1;
    }
};



©著作权归作者所有:来自51CTO博客作者mb5fe18fab305a5的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 使用快慢指针求解「环形链表」so easy!
  2. 剑指 offer 第一题: 二维数组中的查找
  3. 图解LeetCode第 26 号问题:删除排序数组中的重复项
  4. js中基础数据结构数组去重问题
  5. 动画 :相识数组与链表两兄弟
  6. php中比较两个数组差异的方法
  7. php求两数组交集的三种方法详解
  8. PHP生成器-动态生成内容的数组
  9. 如何巧用 PHP 数组函数

随机推荐

  1. “错误:路径必须是字符串”(v5.10.0)
  2. 放在和中的javascript语句,但是语句不在函
  3. 使用php Ajax在数据库中插入动态数据
  4. 打字稿:无法访问类属性[重复]
  5. Change ALL links, hrefs,urls with vani
  6. 1、突然对jQuery的心血来潮
  7. 常用验证JS代码基础及实例
  8. 如何使函数等到对象的值未定义为js setTi
  9. 单选按钮单击,隐藏/显示不工作
  10. 无法在JQuery中查找表单输入