遍历数组,找出不是0的数,将他们覆盖给另一个都为0的数组中即可。
class Solution {
public:
void moveZeros(vector<int>& nums) {
const int n = nums.size();
vector<int> newAddr(n);
int j = 0;
for (int i = 0; i < n; ++i) {
if (nums[i] != 0) {
newAddr[j] = nums[i];
j += 1;
}
}
nums = newAddr;
}
};
双指针解法:
class Solution {
public:
void moveZeros(vector<int>& nums) {
const int n = nums.size();
int right = 0, left = 0;
while (right < n) {
if (nums[right]) {
swap(nums[right], nums[left]);
++left;
}
++right;
}
}
};