• Leetcode题目:Remove Duplicates from Sorted Array


    题目:Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.

    Do not allocate extra space for another array, you must do this in place with constant memory.

    For example,
    Given input array nums = [1,1,2],

    Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn't matter what you leave beyond the new length.

    题目解答:

    class Solution {
    public:
        int removeDuplicates(vector<int>& nums) {
            int size = nums.size();
            if(size <= 1)
                return size;
            int cur_index = 0;
            int next = 1;
            for(; next < size; next++)
            {
                if(nums[cur_index] == nums[next])
                    continue;
                else
                {
                    cur_index++;
                    nums[cur_index] = nums[next];
                }
            }
            return cur_index + 1;
        }
    };

    题目发散:

    上面的代码是自己在编程的时候直接反应写出来的答案。AC之后,想到了C++的STL中,有一个函数unique也可以实现对有序数组的一个去重。

    unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后 返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。

    需注意的是:unique返回的是一个迭代器,即出现重复的第一个位置。

    [1 , 1,  2 , 2 , 3 , 4]

    使用unique之后得到的数组,如下

    [1 , 2 , 3 , 4 , 1 , 2]

    对于上面的这个数组,begin指向1,end指向最末的2的后面的一个位置,那么unique返回的迭代器指向下面这个数组的第二个1的位置。

    于是便重新写了下面这个。

    class Solution {
    public:
        int removeDuplicates(vector<int>& nums) {
            if(nums.size() <= 1)
                return nums.size();
            vector<int>::iterator nums_end_it = unique(nums.begin(),nums.end());
            return nums_end_it - nums.begin();
        }
    };
  • 相关阅读:
    项目总结_写代码
    项目总结_el表达式
    项目总结plc_过滤器规则(filter)_忽略过滤的js和css文件
    tomcat 启动错误
    每天学点java_Eclipse修改author名
    每天学点java_FileOutputSteam类
    每天学点java_File类
    11.28日日记
    《深入理解计算机系统》学习中期
    开始《深入理解计算机系统》
  • 原文地址:https://www.cnblogs.com/CodingGirl121/p/5181146.html
Copyright © 2020-2023  润新知