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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章