日野弥生:勉強しよう
LeetCode 283 - 移动零
发表于2025年01月08日
慢指针只能指向是0的数字,快指针只能指向非零的数字时,才可以进行交换。但是要注意慢指针本身不能超过快指针。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int slow=0,fast=0;
while(slow<nums.size()&&fast<nums.size())
{
if(nums[slow]!=0)
{
slow++;continue;
}
if(nums[fast]==0)
{
fast++;continue;
}
if(nums[slow]==0&&nums[fast]!=0&&slow<=fast)
{
swap(nums[slow],nums[fast]);
}
fast++;
}
}
};
看了官方题解,发现官方题解中不太关注慢指针的动向,所以当快慢指针同时指向同一位置时,会出现相同位置进行交换的情况,增加了交换次数。下面附上官方题解:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int n = nums.size(), left = 0, right = 0;
while (right < n) {
if (nums[right]) {
swap(nums[left], nums[right]);
left++;
}
right++;
}
}
};