【LeetCode】Remove Element

2018-08-14  本文已影响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

上一篇 下一篇

猜你喜欢

热点阅读