非常基础的快慢指针题
快指针不断前移,快指针处不等于0时将0传递给慢指针
慢指针只有当接收到快指针传来的值后才前移
写法1:快指针一次移动多次
void moveZeroes(vector<int>& nums) {
int left = 0;
for (int right = 0; right < nums.size(); ++right) {
// right直接移动到下一个非0元素(也可以一个个元素地移动)
while (right < nums.size() && nums[right] == 0)
++right;
if(right < nums.size())
nums[left++] = nums[right];
}
for (; left < nums.size(); ++left)
nums[left] = 0;
}
写法2:慢指针一次只移动一次,更简洁一些
void moveZeroes(vector<int>& nums) {
int slow = 0;
for (int fast = 0; fast < nums.size(); ++fast) {
if (nums[fast] != 0)
nums[slow++] = nums[fast];
}
while (slow < nums.size())
nums[slow++] = 0;
}