zoukankan      html  css  js  c++  java
  • LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] <c++>

    LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] <c++>

    给出排序好的一维数组,删除其中重复元素,返回删除后数组长度,要求不另开内存空间。

    C++

    很简单的题目,但是第一发RE了,找了很久问题出在哪。最后单步调试发现vector.size()返回值是unsigned型的。unsigned型和int型数据运算结果还是unsigned型的。这就导致当数组为空时,nums.size()-1是一个大正整数,循环变量i很大时,执行了越界下标访问,出现了段错误。

    /*
    Status: Runtime Error
    Runtime Error Message:
    Line 933: Char 34: runtime error: reference binding to null pointer of type 'value_type' (stl_vector.h)
    Last executed input:
    []
    */
    class Solution {
    public:
        int removeDuplicates(vector<int>& nums) {
            unique(nums.begin(),nums.end());
            for(unsigned i = 0; i < nums.size()-1; ++i) {
                if(nums[i]>=nums[i+1])return i+1;
            }
            return nums.size();
        }
    };
    

    虽然知道这个题用STL可以很方便,但是看到函数主体只有一行的代码时我还是感觉自己too young

    /*
    Status: Accepted
    */
    class Solution {
    public:
        int removeDuplicates(vector<int>& nums) {
            return distance(nums.begin(),unique(nums.begin(),nums.end()));
        }
    };
    

    然后去学了一发std::distance的用法:就是返回两个迭代器之间的距离。
    因为std::unique返回最后一个不重复元素的迭代器,所以首迭代器与最后一个不重复元素的迭代器的距离就是不重复元素的个数,即数组长度。

    Java

    Python3

  • 相关阅读:
    C# 读写Excel(NPOI库)
    sql server存储过程回滚事务
    sql server的循环语句
    NopCommerce的autofac的理解
    Django——django连接mysql
    bootstrap
    常用模块杂碎小知识
    常识小知识——(1)
    Django——用户注册并展示出注册信息表案例
    Django——orm概述及在django中使用
  • 原文地址:https://www.cnblogs.com/NeilThang/p/10304281.html
Copyright © 2011-2022 走看看