283. 移动零

115 阅读1分钟

283. 移动零 - 力扣(LeetCode)

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);
        }
    }

image.png