时间轴 2025-12-24 init 题目: P183 移动零https://leetcode.cn/problems/move-zeroes/description/?envType=study-plan-v2&envId=top-100-liked 冒泡排序写法: 123456789101112131415161718192021#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--; } } }}; 双指针: 左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。 右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。 123456789101112131415161718192021222324#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++; } }};