时间轴

2025-12-24

init


题目:

冒泡排序写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <vector>
using std::vector;

class Solution {
public:
void moveZeroes(vector<int> &nums)
{
int i = 0, j = 0, n = nums.size();
int k = n - 1;
for (i = n-1; i >= 0; i--) {
if (nums[i] == 0) {
j = i;
while (nums[j] == 0 && j < k) {
std::swap(nums[j], nums[j + 1]);
j++;
}
k--;
}
}
}
};

双指针:
左指针指向已经处理完的元素的下一个,右指针指向左指针后面的第一个非零元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <vector>
using std::vector;

class Solution {
public:
void moveZeroes(vector<int> &nums)
{
int n = nums.size(), left = 0, right = 0;
while (left < n && nums[left] != 0) {
left++;
}
right = left;
while (right < n && nums[right] == 0) {
right++;
}
while (right < n) {
if (nums[right] != 0) {
std::swap(nums[left], nums[right]);
left++;
}
right++;
}
}
};