LeetCode 283:移动零

    技术2024-08-02  73

    目录

    LeetCode 283:移动零题目描述解题思路优化

    LeetCode 283:移动零

    题目描述

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

    【示例】

    输入: [0,1,0,3,12] 输出: [1,3,12,0,0]

    【说明】

    必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。

    解题

    思路

        双指针法,左指针依次遍历数组,当遇到0时,右指针从当前位置向后搜索,直到找到第一个不为0的值或到末尾,如果不在末尾,则交换左右指针的值,左指针继续遍历。

    class Solution { public: void moveZeroes(vector<int>& nums) { for (int i=0,j=0; i< nums.size();++i){ if (nums[i]==0){ for (j=i+1; j<nums.size() && nums[j]==0; ++j); if (j < nums.size()) swap(nums[i], nums[j]); } } } };

    优化

        快指针依次遍历数组,快指针指向的值等于0时,慢指针停下,当快指针不等于0时交换慢指针和快指针的值,同时慢指针递增1。

    class Solution { public: void moveZeroes(vector<int>& nums) { for (int f=0, s=0; f<nums.size(); ++f){ if (nums[f]!=0){ swap(nums[f],nums[s]); ++s; } } } };
    Processed: 0.012, SQL: 9