1. 程式人生 > 其它 >力扣 283.移動0 雙指標

力扣 283.移動0 雙指標

283. 移動零

給定一個數組 nums,編寫一個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。

請注意 ,必須在不復制陣列的情況下原地對陣列進行操作。

示例 1:

輸入: nums = [0,1,0,3,12] 輸出: [1,3,12,0,0]

示例 2:

輸入: nums = [0] 輸出: [0]

題解

 在原表上修改,使用兩個指標,l r l指向當前更新的位置,r往前搜尋;

  • 如果r上的元素=0,則r向右繼續移動
  • 如果r上元素!=0,則需要更新,將此元素與l位置元素交換,使用swap,並且l向右移動,為下一次賦值做準備

被更新過的位置(l左邊)儲存非0元素,r在向右搜尋,判斷此位置元素是否需要儲存

檢視程式碼

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int l=0,r=0,len=nums.size();
        while(r<len){
            if(nums[r]!=0){
                swap(nums[l++],nums[r]);
            }
            r++;         
        }
        l++;
    }
};