leetcode 283. move-zeroes 移动零 python3

本文提供LeetCode中移动零问题的两种解决方案,利用快慢指针技巧实现原地修改数组,保持非零元素顺序不变的同时将零元素移至数组尾部。第一种方法直接交换非零元素位置;第二种方法通过调用移除指定元素函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间:2021-02-28

题目地址:https://leetcode-cn.com/problems/move-zeroes/

题目难度:Easy

题目描述:

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

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:

必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。


思路1:快慢指针

代码段1:通过

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        slow, fast = 0, 0
        while fast < len(nums):
            if nums[fast] != 0:
                nums[slow], nums[fast] = nums[fast], nums[slow]
                slow += 1
            fast += 1

总结:

  1. 空链表的特殊判断,最后断开连接这步别忘了

思路2:快慢指针

调用27的函数,最后统一赋值0

代码段2:通过

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        def removeElement(nums, val):
            slow, fast = 0, 0
            while fast < len(nums):
                if nums[fast] != val:
                    nums[slow] = nums[fast]
                    slow += 1
                fast += 1
            return slow
        temp = removeElement(nums, 0)
        for i in range(temp, len(nums)):
            nums[i] = 0

总结:

  1. 这个思路可能比上边的解法操作少一些,可能写代码的时候确实需要考虑是不是需要封装一下,方便复用,能够节省很多工作量。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值