问题描述
代码解决以及思想
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int left = 0; // 左指针,用于指向当前非零元素应该放置的位置
int right = 0; // 右指针,用于遍历数组
int len = nums.size(); // 数组长度
while (right < len) {// 如果右指针指向的元素不是零
if (nums[right] != 0) {// 交换左指针和右指针指向的元素,将非零元素移动到左指针的位置
swap(nums[left], nums[right]);// 移动左指针,为下一个非零元素找到位置
left++;
}
// 移动右指针,继续遍历数组
right++;
}
}
};
上述代码的思想是使用双指针法,通过一个左指针(
left
)和一个右指针(right
)协同工作,将数组中的所有零元素移动到数组的末尾,同时保持其他非零元素的相对顺序。以下是代码的主要思想:
初始化左指针
left
和右指针right
为数组的起始位置。右指针
right
用于遍历整个数组。如果右指针指向的元素不是零(
nums[right] != 0
),表示找到了一个非零元素。执行交换操作:交换左指针
left
和右指针right
指向的元素。这样做的效果是将非零元素移动到左指针的位置。移动左指针
left
,以便为下一个非零元素找到位置。移动右指针
right
继续遍历数组。重复上述步骤,直到右指针
right
遍历完整个数组。
写在最后:以上就是本篇文章的内容了,感谢你的阅读。如果感到有所收获的话可以给博主点一个赞哦。如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~