天天看點

leetcode283刷題筆記(雙指針解法)283. 移動零

283. 移動零

問題描述:傳送門

leetcode283刷題筆記(雙指針解法)283. 移動零

思路:

1、構造fast指針和slow指針

很明顯,要把元素0往右移動。

構造fast指針,和slow指針為0

如果fast[i]不為0,就把快指針的值,給慢指針,然後同時向前移動。

反之,fast【i】先往前走到不為零的位置,再把值傳給慢指針。

leetcode283刷題筆記(雙指針解法)283. 移動零

最後傳到不能傳的位置,fast達到末尾,slow基本達到第一個零左移後的位置。

leetcode283刷題筆記(雙指針解法)283. 移動零

這個時候,一直把slow置為0就行。

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
      int slow=0;
      int fast=0;
      for(int j=fast;j<nums.size();j++){
          if(nums[j]!=0){
              nums[slow++]=nums[j];//把快指針,傳給慢指針
          }
      }
        for(int i=slow;i<nums.size();i++){
            nums[i]=0;//一直把slow置為0
        }
    }
};