双指针的基本思想:
首先根据异地操作确定指针的基本步骤,再将异地操作优化成原地操作的双指针解法
链接:283. 移动零 - 力扣(LeetCode)
题解:
异地操作:fast指针指向原数组,slow指针指向新数组,fast遍历原数组,如果fast遇到0则不处理,如果fast遇到非0则slow指向的新数组位置拷贝fast指向的元素并且slow++,直到fast遍历完原数组。新数组剩下的位置填0。
优化为双指针本地操作:fast和slow指针都指向原数组,遵循异地操作中的步骤,方案可行。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int fast=0,slow=0;
for(;fast<nums.size();fast++)
{
if(nums[fast]!=0)
{
nums[slow]=nums[fast];
slow++;
}
else
{
//不做处理
}
}
while(slow<nums.size()) nums[slow++]=0;
}
};