Leetcode Problem27

Remove Element

问题描述:删除数组中与给定数字相同的元素,并返回新数组的长度。

问题解决:这道题看起来很简单,我的实现是下面这样的,

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

但是效果很差,仅仅是beats 4.39 % of cpp submissions.
再次看了题目,发现我们并不需要把vector中的元素给删掉,我们只要把那些有效的元素往前移动就可以。

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

beats 98.30 % of cpp submissions.
很想知道另外1.70%的大神是怎么做的。。。

猜你喜欢

转载自blog.csdn.net/vandance/article/details/82227380