Cover image for leetcode热题100 P283 移动零

leetcode热题100 P283 移动零

字数 261
阅读
访客

时间轴

时间轴

2025-12-24

init

双指针

题目:

冒泡排序写法:

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++;                }        }};
评论加载中…