Leetcode刷题笔记

第十天 Move Zeroes

2018-08-30  本文已影响6人  业余马拉松选手

第十天啦,刷的还蛮开心的
据说21天会养成一个习惯,已经接近一半啦
不过目前leetcod已经有727道题了,完全刷完要两年,嗯,慢慢来,不想太多,切忌好高骛远
回到今天这道题吧

https://leetcode-cn.com/problems/move-zeroes/description/

把一个数组中的所有0都挪到最后去,非0元素之间是顺序还需要保持。

如果能开个空间去做,那么就很方便了。当然如果两次循环也是可以跑出结果的,不过效率想一下就不太高。

这里有一个相对比较巧妙的双指针方法,嗯,今天状态太差了。

慢指针,始终指向上一个非零数字的后一个位置【好绕的概念😭】,然后快指针则不断向后扫描,找到一个非零的数字,这是把快指针的数字赋值给慢指针的位置,同时将快指针的位置设置为0。

先贴一下AC的代码吧

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

猜你喜欢

热点阅读