第十天啦,刷的还蛮开心的
据说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
网友评论