题目
给定一个数组,请将数组中的零移动数组末尾,并保持其他数字的相对顺序。
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
原题链接: https://leetcode.cn/problems/move-zeroes/
思路
直接遍历数组,不断地将非0数组移动到最前面,同时统计数组中 零 的个数。遍历完一遍数组后,再直接从数组末尾开始补相应的零即可。
- 复杂度分析
- 时间复杂度 O(n)。
- 空间复杂度 O(1)。
代码
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int prev = 0;
int count = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == 0) {
count++;
}
else {
nums[prev] = nums[i];
prev++;
}
}
for (int i = nums.size() - count; i < nums.size(); i++) {
nums[i] = 0;
}
}
};