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

  • 相关阅读:
    struts 简单配置运用做一个简单的注册
    hibernate 锁 (转)
    Hibernate 缓存机制(转)
    解决Hibernate:could not initialize proxy
    el 表达式用法(转)
    自动生成Hibernate框架结构
    封装hibernate 初始化类 方便调用 (静态单例模式)
    构建hibernate 框架实现增删改查功能
    JSON 与 对象 、集合 之间的转换(转)
    Ajax 引擎 传输数据的方法
  • 原文地址:https://www.cnblogs.com/NeilThang/p/10304281.html
Copyright © 2011-2022 走看看