《LeetCode之每日一题》:124.移动零

Posted 是七喜呀!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《LeetCode之每日一题》:124.移动零相关的知识,希望对你有一定的参考价值。

移动零


题目链接: 移动零

有关题目

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

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

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

题解

法一:计数+补零

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int n = nums.size(), cnt = 0;
        for (int i = 0; i < n; ++i){
            if (nums[i] == 0){
                ++cnt;//计数
                continue;
            }
            nums[i - cnt] = nums[i];//移动非零元素
        }
        while(cnt > 0){
            nums[n - cnt] = 0;//补零
            --cnt;
        }
    }
};

时间复杂度:O(N)
空间复杂度:O(1)
法二:双指针

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

时间复杂度:O(N)
空间复杂度:O(1)

以上是关于《LeetCode之每日一题》:124.移动零的主要内容,如果未能解决你的问题,请参考以下文章

[每日一题2020.06.21]leetcode #124 DFS二叉树

LeetCode每日一题2020.6.21 124. 二叉树中的最大路径和

《LeetCode之每日一题》:53.一和零

letcode每日一题-移动零

《LeetCode之每日一题》:101.加一

《LeetCode之每日一题》:184.加一