283.移动零

在这里插入图片描述

一下子没想出来,模拟下了计算机的步骤。如下:
在这里插入图片描述

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i = 0 # i表示遍历到j处时,包含的非0数的数量
        j = 0 # 遍历
        nlen = len(nums)
        for j in range(nlen):
            if nums[j] != 0: 
            # 如果当前数不是0,就将它移到i的位置上;其实就是将所有非零的数挪到前面,遍历完后,后面全置为0即可。
                nums[i] = nums[j]
                i += 1 
        for j in range(i, nlen):
            nums[j] = 0
        
class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        j = 0
        # 借鉴快排的思路:将大于0的数换到左边,小于的换到右边;在这就是非零的在左边,零在右边。
        # 只不过不是一直换到第一个位置上,而是用j记录下一个填入非零数的位置。以此保证顺序不乱。
        # 也不是从右边开始,然后换移动指针。而是一直移动i指针,j计数。
        # 这个就不用再来个遍历将后边置零了。
        for i in range(len(nums)):
            if nums[i] :# 如果数非零,就交换位置
                nums[i], nums[j] = nums[j], nums[i]
                j += 1
        

参考链接:动画演示 283.移动零动画演示更清晰。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值