283 移动零

题目 283 移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

思路

  • 双指针算法,和一道题27 移除元素很像,这道题就是移除0元素的含义,并且最后补上0。
  • 具体思路:就在原数组上进行操作,左指针代表下标,右指针也代表下标。循环数组,右指针指向的元素不为0,就把该元素放到左指针指向的元素位置,同时俩指针后移;右指针指向的元素为0,则右指针右移。循环完后再补right-left个0即可。
  • 我的代码中有一行注释,应该是正确的,可力扣上就是不过,没有把nums原数组后面的0给覆盖掉,有大神的一定要评论告知一下哈。

代码

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        left, right = 0, 0
        while right < len(nums):
            if nums[right] != 0:
                nums[left] = nums[right]
                left += 1
                right += 1
            else:
                right += 1
        # return nums[:left] + [0]*(right-left)
        for i in range(left, len(nums)):
            nums[i] = 0
        return nums
posted @ 2022-11-10 22:59  时光如你般美好  阅读(17)  评论(0编辑  收藏  举报