Move Zeroes
Given an array nums
, write a function to move all 0
's to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12]
, after calling your function, nums
should be [1, 3, 12, 0, 0]
.
Note:
- You must do this in-place without making a copy of the array.
- Minimize the total number of operations.
将数组里面的0,全部移到后面,不能改变其他元素的位置,也不能复制数组,在原数组上操作。
设立一个f, 将不为0的数依次移到nums[f++]上来,最后的几个数则赋值为0.
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int number = 0; // 不为0的个数
int n = nums.size();
for (int i = 0;i < n;i++) {
if (nums[i] != 0) number++; //统计不为0的个数
}
if (!number) return ;
int f = 0;
for (int i = 0;i < n;i++) {
if (nums[i] != 0) {
nums[f++] = nums[i]; //将不为0的元素依次移到前面
}
if (i >= number) nums[i] = 0; // 最后几个肯定为0 直接赋值
}
}
};
Given an array nums
, write a function to move all 0
's to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12]
, after calling your function, nums
should be [1, 3, 12, 0, 0]
.
Note:
- You must do this in-place without making a copy of the array.
- Minimize the total number of operations.