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++
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
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
转载于:https://www.cnblogs.com/NeilThang/p/10304281.html
总结
以上是生活随笔为你收集整理的LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] c++的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Sql Server触发器的使用
- 下一篇: 【iOS 开发】Objective -