0%

283. Move Zeroes

直接覆盖 O(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int n = nums.size();
int j = 0;
for (int x : nums) {
if (x != 0) {
nums[j++] = x;
}
}
fill(begin(nums) + j, end(nums), 0);
}
};

swap O(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int n = nums.size();
int i = 0, j = 0;
while (j < n) {
while (i < n && nums[i] != 0) ++i;
for (j = i + 1; j < n && nums[j] == 0; ++j);
if (j >= n) break;
swap(nums[i], nums[j]);
++i;
}
}
};