zoukankan      html  css  js  c++  java
  • LeetCode-26. Remove Duplicates from Sorted Array

    一、问题描述

      给定一个排过序的数组,将他们重复的元素移到最后(标准库中unique的效果),返回不重复元素的个数

      例子:给定一个数组{1,1,2},将数组变为{1,2,1},返回值为2

    二、问题解决

      思路还是很简单,记录两个位置,第一个位置向前遍历,每次遇到不等的数就将他位置的数移到后一个位置上,然后前后位置加1,直到前一个位置遍历完整个数组。

    int removeDuplicates(vector<int>& nums) {
        if (nums.size() == NULL) return 0;
        int num = nums.at(0);
        int pos = 1;
        for (int i = 1; i < nums.size(); i++) {
            while (i < nums.size() && nums.at(i) == num)
                i++;
            if (i == nums.size()) return pos;
            if (i != pos)
                nums.at(pos) = nums.at(i);
            pos++;
            num = nums.at(i);
        }
        return pos;
    }
    
    int main()
    {
        vector<int> v = {1,1};
        cout << removeDuplicates(v) << endl;
    
        system("pause");
        return 0;
    }

     上面的代码还是很繁琐,不容易看出逻辑。Leetcode里面讨论有一个很简洁的实现,可以看一波

    public int removeDuplicates(int[] nums) {
        if (nums.length == 0) return 0;
        int i = 0;
        for (int j = 1; j < nums.length; j++) {
            if (nums[j] != nums[i]) {
                i++;
                nums[i] = nums[j];
            }
        }
        return i + 1;
    }

    代码简洁,思路清晰,比我的好得多,且边界条件好想到。

  • 相关阅读:
    golang_并发安全: slice和map并发不安全及解决方法
    什么情况下需要用到互斥锁sync.Mutex?
    使用Charles进行HTTPS抓包
    centos6 yum 源失效 404,终于解决了
    GOMAXPROCS你设置对了吗?
    容器资源可见性问题与 GOMAXPROCS 配置
    gflags 使用方式
    分布式训练问题
    NCCL常用环境变量
    git 常用命令
  • 原文地址:https://www.cnblogs.com/likaiming/p/8306347.html
Copyright © 2011-2022 走看看