LeetCode 283.移动零
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
输入:nums = [0,1,0,3,12]
输出:[1,3,12,0,0]
my_code:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int ptr1=0,ptr2=0;
while(ptr1<nums.size()){
if(nums[ptr1]!=0){
swap(nums[ptr1],nums[ptr2]);
ptr2++;
}
ptr1++;
}
}
};
思路:
利用双指针。初始时将两个指针置于数组头部。让ptr1右移,遇到非零的数,交换ptr1和ptr2的数,同时将ptr2右移一位。
ptr2始终指向第一个0所在的位置。