LeetCode283. 移動零
阿新 • • 發佈:2020-08-27
雙指標,用兩個指標zero和nonZero分別找到一個為0和一個不為0的數,且如果不為0的數在為0的數後面,則交換這兩個數。
如果在0的前面,則不用交換,zero指標不動,nonZero從zero指標的下一個位置開始尋找一個不為0的數,與zero指標交換。
重複這個過程,直到兩個指標其中之一越界。
class Solution { public: void moveZeroes(vector<int>& nums) { int zero = 0, nonZero = 0, size = nums.size(); while(zero < size && nonZero < size) { while(zero < size && nums[zero] != 0) { ++zero; } if(zero == size) { return ; } while(nonZero < size && nums[nonZero] == 0) { ++nonZero; } if(nonZero == size) { return ; } if(zero < nonZero) { swap(nums[zero], nums[nonZero]); } else { nonZero = zero + 1; } } } };