leetcode 283. 移动零

问题描述

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

示例:

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

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

代码

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int n = nums.size(),slow = 0,fast = 0,i,tmp;
        if(n < 2)return;
        while(fast < n)
        {
            if(nums[fast] != 0)
            {
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }
        while(slow<n)
        {
            nums[slow++] = 0;
        }
    }
};

结果:

执行用时 :8 ms, 在所有 C++ 提交中击败了82.08%的用户
内存消耗 :10.3 MB, 在所有 C++ 提交中击败了5.43%的用户

或者更简洁的写法:

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int n = nums.size(),slow,fast;
        if(n < 2)return;
        for(slow = 0,fast = 0;fast < n; ++fast)
        {
            if(nums[fast] != 0)
                swap(nums[slow++],nums[fast]);
        }
    }
};

结果:

执行用时 :8 ms, 在所有 C++ 提交中击败了82.08%的用户
内存消耗 :10.3 MB, 在所有 C++ 提交中击败了5.43%的用户
posted @ 2020-03-23 08:53  曲径通霄  阅读(132)  评论(0编辑  收藏  举报