1. 问题:
1.1 问题描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
1.2 示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
1.3 说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/move-zeroes
2. 思路:
2.1 对任意一个非零数,若在该数之前有x个0出现,该数就应该前移x位;
2.2 最后将0全部补在数组末尾。
3. C++代码:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int zero = 0;
int i;
for(i=0;i<nums.size();i++){
if(nums[i]==0){
zero++;
}
else{
nums[i-zero] = nums[i];
}
}
for(i=nums.size()-zero;i<nums.size();i++){
nums[i] = 0;
}
return;
}
};
4. 复杂度:
时间复杂度:O(n):
只需要遍历一遍数组。
空间复杂度:O(1):
不需要额外空间。