问题(移动0):
- 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
- 输入: [0,1,0,3,12]
- 输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
这道题很容易,明显的双指针问题,就是用一个指针代表非0元素,一个指针去遍历数组;
初始值都是0(也可以一个0,一个是n)
当遍历指针遇到非0元素,就让遍历指针所指非0元素和代表非0元素的指针所指元素交换,然后代表非0元素的指针加1,当遍历指针等于数组长度时遍历结束;
代码:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int n=nums.size();
int l=0,r=0;
while(r<n)
{
if(nums[r])
{
swap(nums[r],nums[l]);
l++;
}
r++;
}
}
};