美文网首页
【LeetCode】Remove Element

【LeetCode】Remove Element

作者: 程点 | 来源:发表于2018-08-14 10:41 被阅读0次

这是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

相关文章

网友评论

      本文标题:【LeetCode】Remove Element

      本文链接:https://www.haomeiwen.com/subject/kfumbftx.html