leetcode26 删除排序数组中的重复项

it2022-05-05  133

昨天那两个太简单了,不写了,注意复习一下链表的操作就好了。

今天这个也不应该写的,有点zz

考虑到要返回结果,第一反应是用迭代器遍历

class Solution { public: int removeDuplicates(vector<int>& nums) { if(nums.size() == 0) return 0; vector<int>::iterator ite = nums.begin() + 1; int ans = 1; while(ite != nums.end()){ if(*ite == *(ite - 1)) nums.erase(ite); else{ ite++; ans++; } } return ans; } };

但是提交之后发现,怎么有90的人比我的代码速度要快啊?emmmm...

后来发现一行字,“你不需要考虑数组中超出新长度后面的元素”...

class Solution { public: int removeDuplicates(vector<int>& nums) { int ans = 0; for(int i = 0; i < nums.size(); i++){ if(i == 0 || nums[i] != nums[ans - 1]) nums[ans++] = nums[i]; } return ans; } };

想不出更快的了

 

在这里再说一下27,跟26的问题差不多,移除等于val的元素。在需要删除的数很少的时候,双指针可以从两端开始扫

class Solution { public: int removeElement(vector<int>& nums, int val) { int n = nums.size(); int i = 0; while(i < n){ if(nums[i] == val){ nums[i] = nums[n - 1]; n--; } else i++; } return n; } };

不过从题目给的数据上来看效率差距不大,但是在数据量非常大的情况下还是节省了不少时间


最新回复(0)