首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 27. 移除元素:雙指標原地刪除陣列元素詳解

     編輯:關於C++

題目圖示

這道題目給的陣列是無序的,要求刪除特定元素,然後返回剩餘陣列長度。相對簡單,思路是:依序找到不等於 val 的值,將其移至前面序列。需注意:第一次出現 val 之前的所有位置不能被覆蓋,所以未出現 val 前,pos 需與 nextpos 一起前移。使用 bool 值 begin 表示是否出現過 val,避免覆蓋無辜元素。

class Solution {
public:
    int removeElement(vector& nums, int val) {
        int len = nums.size();
        int pos = 0;          // 當前寫入位置
        int nextpos = 0;      // 掃描位置
        int numofval = 0;     // 統計 val 出現次數
        bool begin = false;   // 是否已遇到 val

        while (nextpos < len) {
            if (nums[nextpos] == val) {
                begin = true;
                ++numofval;
                ++nextpos;
                // 將後續非 val 元素前移
                while (nextpos < len && nums[nextpos] != val) {
                    nums[pos++] = nums[nextpos++];
                }
            } else {
                if (!begin) ++pos;
                ++nextpos;
            }
        }
        return len - numofval;
    }
};
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved