建筑工程网论坛,苏州优化方式,酷家乐装修设计软件app下载,移动端网页制作流程https://leetcode.cn/problems/move-zeroes/description/
小白思想
思想上还是首先开一个指针i#xff0c;i从左到右扫每一个元素#xff0c;i每发现一个0#xff0c;就把这个0推到最后#xff0c;这样i到最后就可以了。
这个和删除元素那个题解的小白思想和一模一样i从左到右扫每一个元素i每发现一个0就把这个0推到最后这样i到最后就可以了。
这个和删除元素那个题解的小白思想和一模一样只不过把val换成0把元素交换更换成把元素推向最后的push_end就行了。代码我就不写了。。
def push_end(nums,left,right): # 按次序把left位置上的元素推到right位置dummynums[left]tmpleftwhile tmp1right:nums[tmp]nums[tmp1]tmp1 nums[right]dummyreturn nums因为小白思路简单直白但是代码写起来很啰嗦。
技巧
这是要记住的知识点
脑中脑中迅速闪过几个关键词数组、数组划分部分、双指针 考虑快慢指针。
一般使用起来都是O(n)结束条件几乎都是快指针遍历结束慢指针恰好在边界。不同点是慢指针的条件各不相同。
根据小白解法我们让快指针去指向判定当前元素是否能进入左侧要保留部分的位置慢指针指向保留部分的最后一个位置。也就是快指针做条件判断慢指针做位置标识。
那么用什么条件作为快指针条件呢 回归题意我们希望左侧的都是不等于0这样只要nums[fast]!val就可以把fast元素放到左侧了。
class Solution:def moveZeroes(self, nums: List[int]) - None:Do not return anything, modify nums in-place instead.slow0for fast in range(len(nums)):if nums[fast]!0:# swaptmpnums[fast]nums[fast]nums[slow]nums[slow]tmpslow1这样写起来非常简洁而且还能保持原先数组的顺序。小白看了都哭了……