这段代码是一个 C++ 解决方案,用于将数组中的所有 '0' 元素移动到数组的末尾。

首先,定义了三个变量:

  • n: 表示数组的长度。
  • left: 表示 '0' 元素应该插入的位置。
  • right: 表示当前遍历到的元素位置。

代码使用一个 while 循环 遍历数组中的元素。

right 指针 指向的元素不为 '0' 时,将该元素与 left 指针 指向的元素进行交换,并将 left 指针 向右移动一位。

right 指针 在每次循环中都向右移动一位。

最终,所有非 '0' 元素都被移动到了左侧,而 '0' 元素被移动到了右侧。

代码示例:

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

代码解释:

  1. 定义变量: n 表示数组长度,leftright 分别用作两个指针,left 指向下一个非零元素应该放置的位置,right 指向当前遍历到的元素位置。
  2. 遍历数组: while 循环遍历数组,直到 right 指针到达数组末尾。
  3. 交换元素: 如果 nums[right] 不为零,则将其与 nums[left] 交换,然后将 left 指针向右移动一位。
  4. 移动 right 指针: 无论 nums[right] 是否为零,right 指针都会向右移动一位,继续遍历数组。

代码逻辑:

代码的核心思想是维护两个指针 leftrightleft 指针指向下一个非零元素应该放置的位置,right 指针遍历数组。当 right 指针遇到非零元素时,将其与 left 指针指向的元素交换,并将 left 指针向右移动。这样,所有非零元素都会被移动到数组的左侧,而零元素则被移动到右侧。

总结:

这段代码通过两个指针和一个 while 循环,实现了将数组中的所有 '0' 元素移动到数组末尾的功能。代码逻辑清晰,易于理解和实现。


原文地址: http://www.cveoy.top/t/topic/pkvy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录