2023/11/26 二刷
刚开始没思路,后来看见有个双指针字眼,就回忆出来了:
思路:快慢指针都指向开头,如果fast为0,就让fast走,slow停在原地,目的:为了让fast走到不为0,再与为0的
slow交换,这样就把0换到后面,不为0的数换到前面了,而且还不改变相对顺序。
否则(fast不为空),那说明没有要交换的,slow和fast整体++;
int fast=0;
int slow=0;
int size=nums.size();
while(size--)
{
if(nums[fast]==0)fast++;
else
{
swap(nums[fast],nums[slow]);fast++;slow++;
}
}
我刚开始的思路是开一个临时存储变量temp,遇见0就把0放到temp里面,然后数组整体向前挪动,再把temp尾插到数组后面,但是超出时间限制了:
int temp=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]==0)
{
temp=nums[i];
nums[i]=nums[i+1];
nums.push_back(temp);
}
}