1. 题目解析
题目中我们可以知道我们要对一个数组中的元素进行移动零的操作,并且不可以开辟新的数组,也不能打乱原来非零元素的顺序,还要将所有的零都移动到数组末尾,那么我们可以使用双指针的方法来解决这样的问题
2. 算法原理
1. 由题目我们可以知道的是,处理好了的数组被分为了两个部分,分别是非零元素部分与零 元素部分,所以我们可以使用双指针来限制区间的范围从而将不同的元素划分到不同的区 间内
2. 具体方法就是使用一个 cur 指针来遍历数组,一个 dest 指针来划分已处理数组的不同元 素区间,当 cur 指针遇见零元素就直接 cur++ ,dest++,跳过零元素;当 cur 指针遇见 了非零元素那么就交换 cur 指针指向的元素与 dest 指针指向的下一个元素,最终就完成 了移动零的操作,具体区间见下图
3. 代码实现
- class Solution {
- public:
- void moveZeroes(vector<int>& nums)
- {
- for(int cur = 0,dest = -1;cur < nums.size();cur++)
- {
- if(nums[cur])
- {
- swap(nums[++dest],nums[cur]);
- }
- }
- }
- };