美文网首页程序员
27. Remove Element

27. Remove Element

作者: Nautilus1 | 来源:发表于2017-10-24 10:47 被阅读0次

    题目描述:给一个数组和一个值,去掉这个数组中所有等于这个值的元素,返回处理后的数组长度。要求原地操作,可更改元素顺序。

    分析:双指针的应用,设指针 k 指向目前不等于给定值的最后一个元素的下标,遍历数组的同时判断元素是否为给定值,不是则 A[k++] = A[i],否则不处理。 时间复杂度O(n),空间O(1)。

    方法一

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

    方法二:用C++ STL函数一句话即可。remove(nums.begin(), nums.end(), val)); 效果是删除迭代器区间中所有值为val的元素,实际上并未从内存中删除,只是移动了位置,返回进行删除操作后,最后一个元素的位置。要真正删除还需 nums.erase(remove(nums.begin(),
    nums.end(),val), nums.end());

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

    相关文章

      网友评论

        本文标题:27. Remove Element

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