C++ 数组中移动零元素到末尾的代码详解
这段代码是一个 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++;
}
}
};
代码解释:
- 定义变量:
n表示数组长度,left和right分别用作两个指针,left指向下一个非零元素应该放置的位置,right指向当前遍历到的元素位置。 - 遍历数组:
while循环遍历数组,直到right指针到达数组末尾。 - 交换元素: 如果
nums[right]不为零,则将其与nums[left]交换,然后将left指针向右移动一位。 - 移动 right 指针: 无论
nums[right]是否为零,right指针都会向右移动一位,继续遍历数组。
代码逻辑:
代码的核心思想是维护两个指针 left 和 right,left 指针指向下一个非零元素应该放置的位置,right 指针遍历数组。当 right 指针遇到非零元素时,将其与 left 指针指向的元素交换,并将 left 指针向右移动。这样,所有非零元素都会被移动到数组的左侧,而零元素则被移动到右侧。
总结:
这段代码通过两个指针和一个 while 循环,实现了将数组中的所有 '0' 元素移动到数组末尾的功能。代码逻辑清晰,易于理解和实现。
原文地址: http://www.cveoy.top/t/topic/pkvy 著作权归作者所有。请勿转载和采集!