283. 移動零
問題描述:傳送門
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL4VEROpXVU9UMJpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLwMTNwQDNwADMwITMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
思路:
1、構造fast指針和slow指針
很明顯,要把元素0往右移動。
構造fast指針,和slow指針為0
如果fast[i]不為0,就把快指針的值,給慢指針,然後同時向前移動。
反之,fast【i】先往前走到不為零的位置,再把值傳給慢指針。
最後傳到不能傳的位置,fast達到末尾,slow基本達到第一個零左移後的位置。
這個時候,一直把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
}
}
};