时间轴
时间轴
2025-12-24
init
双指针
题目:
冒泡排序写法:
123456789101112131415161718192021 | 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 | 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++; } }}; |
