leetcode hot100-03 移动零
移动零
地址:https://leetcode.cn/classic/problems/move-zeroes/description/
难点:
- 在原数组的基础上进行移动
- 保持相对顺序思考过程:
思考过程:
-
一开始没有考虑顺序的问题
- 记录最后一个不是0的位置
- 从左遍历数据
- 如果为0 则将数据与最后一位不是0的数据交换
- 最后不是0的数据更新位置
- 最后一位不是0的数据和左指针重合则退出
虽然能到达最后一位都是0的效果,但是最终顺序变了
-
思考顺序的问题
- 换一个思路,一个指针指向第一个为0的,第二个指针指向第一个不为0的
- 两边交换,第一个指针+1 ,原来第二个为0的变为第一个为0的
- 往复执行
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
i,j = 0,0
for j in range(len(nums)):
if nums[j] !=0:
nums[i],nums[j] = nums[j],nums[i]
i += 1
func moveZeroes(nums []int) {
i, j, l := 0, 0, len(nums)
for j <l {
if nums[j]!=0{
nums[j],nums[i] = nums[i],nums[j]
i ++
}
j ++
}
}
其实这个双指针和快排序的思路很像