《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二叉树