建设工程查询网站,wxparse wordpress,网站建设优化加盟代理,网页设计基础试题及答案移动零原题地址
方法一#xff1a;传统双指针法
本题要求把非零元素移动到左边#xff0c;零移动到右边#xff0c;这跟快速排序的单趟非常相似。
定义左右指针 left 和 right #xff0c; right 指针负责探测所有元素#xff0c;如果遇到非零元素#xff0c;则左右指…移动零原题地址
方法一传统双指针法
本题要求把非零元素移动到左边零移动到右边这跟快速排序的单趟非常相似。
定义左右指针 left 和 right right 指针负责探测所有元素如果遇到非零元素则左右指针交换再同时右移如果遇到零则左指针不动右指针右移。
说人话就是如果遇到非零元素就把这个数换到左边把左边的零换到右边如果遇到零那就不用管了零就该待在右边。
// 方法一双指针
class Solution
{
public:void moveZeroes(vectorint nums){int n nums.size();int left 0;int right 0;// 非零交换数据左右指针都往右移// 零右指针右移while (right n){if (nums[right]){swap(nums[left], nums[right]);left;}right;}}
};
方法二双指针的取巧实现
这道题可以用另一种方式理解。我们可以考虑把所有非零数都移动到左边再在右边填充零。
同样定义 left 和 right right 负责探测所有元素如果遇到非零元素就把这个元素覆盖到 left 的位置两个指针同时右移如果遇到零左指针不动右指针右移。
这样我们就把所有的非零元素移动到了左边此时只要把 left 右边的位置都用零覆盖即可。
// 方法二双指针的另一种取巧实现
class Solution
{
public:void moveZeroes(vectorint nums){int n nums.size();int left 0;int right 0;// 非零覆盖到左边while (right n){if (nums[right]){nums[left] nums[right];}right;}// 后面全填零while (left n){nums[left] 0;}}
};