leetcode-27. 移除元素笔记(C++)

写在前面

  • 最近加班儿较多,脑袋转的着实慢很多,,,
  • 方式新颖、出奇,值得笔记

题目详情

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素(此处敲黑板)。
  • ac代码
  • 双指针(广义)!
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int cnt = 0;
        int siz = nums.size();
        for(int i=0; i<siz; i++) {
            if(nums[i]!=val){
                nums[cnt++] = nums[i];
            }
        }
        return cnt;
    }
};
  • erase删除函数
    • erase 删除元素后,数组长度变化,按照原长度访问数组将导致越界问题
class Solution
{
public:
    int removeElement(vector<int>& nums, int val)
    {
        int cnt=0;
        int nsize = nums.size();
        for(int j=0; j<nsize; j++)
        {
            if(nums[j]!=val)
                cnt++;
        }

        int k=0;
        if(cnt==0) return 0;
        vector<int>::iterator it;
        for(int i=0; i<nsize; i++)
        {
            if(nums[k]==val && k<cnt)
            {
                it=nums.begin()+k;
                nums.erase(it);
                continue;
            }
            else if(k<cnt)
                k++;
        }
        return cnt;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章