【LeetCode】Remove Element

这是LeetCode中的一个题目,原题在这里
问题大意:
给一个数组nums和一个值val,删除数组中的所有值为val的元素,并返回删除后的数组新长度。

解析:

  1. 两个位置索引,分别是begin, i
  2. begin表示新数组末尾索引,初始化为0;i表示遍历数组的索引变量,开始为0
  3. 如果num[i] != val,则num[begin] = num[i],begin和i都加1
  4. 如果num[i] == val,则begin不变,i加1

时间复杂度为O(n),空间复杂度为O(1)

C++实现一

class Solution { public: int removeElement(vector<int>& nums, int val) { int begin = 0; for(int i = 0; i < nums.size(); ++i) { if(nums[i] != val) nums[begin++] = nums[i]; } return begin; } };

c++实现二

这里可以使用STL中的remove简化代码

class Solution { public: int removeElement(vector<int>& nums, int val) { nums.erase(remove(nums.begin(),nums.end(),val), nums.end()); return nums.size(); } };

本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。转载请注明: 作者staneyffer,首发于我的博客,原文链接: https://chengfy.com/post/6


载入评论中....