leetcode hot100-03 移动零

发布时间 2023-11-26 15:45:06作者: soultank

移动零

地址:https://leetcode.cn/classic/problems/move-zeroes/description/

难点:

  • 在原数组的基础上进行移动
  • 保持相对顺序思考过程:

思考过程:

  • 一开始没有考虑顺序的问题

    • 记录最后一个不是0的位置
    • 从左遍历数据
    • 如果为0 则将数据与最后一位不是0的数据交换
    • 最后不是0的数据更新位置
    • 最后一位不是0的数据和左指针重合则退出

    虽然能到达最后一位都是0的效果,但是最终顺序变了

  • 思考顺序的问题

    • 换一个思路,一个指针指向第一个为0的,第二个指针指向第一个不为0的
    • 两边交换,第一个指针+1 ,原来第二个为0的变为第一个为0的
    • 往复执行
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i,j = 0,0
        for j in range(len(nums)):
            if nums[j] !=0:
                nums[i],nums[j] = nums[j],nums[i]
                i += 1
func moveZeroes(nums []int) {
    i, j, l := 0, 0, len(nums)
    for j <l {
        if nums[j]!=0{
            nums[j],nums[i] = nums[i],nums[j]
            i ++
        }
        j ++
    } 
}

其实这个双指针和快排序的思路很像

!https://s3-us-west-2.amazonaws.com/secure.notion-static.com/be453783-540c-4548-801f-f36ef64af030/Untitled.png