日野弥生:勉強しよう

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++;
        }
    }
};

フラッシュタブ:LeetCode

题目链接:https://leetcode.cn/problems/move-zeroes/

上一篇

LeetCode 26 - 删除排序数组中的重复项

下一篇

LeetCode 707 - 设计链表