283 移动零
题目 283 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
思路
- 双指针算法,和一道题27 移除元素很像,这道题就是移除0元素的含义,并且最后补上0。
- 具体思路:就在原数组上进行操作,左指针代表下标,右指针也代表下标。循环数组,右指针指向的元素不为0,就把该元素放到左指针指向的元素位置,同时俩指针后移;右指针指向的元素为0,则右指针右移。循环完后再补right-left个0即可。
- 我的代码中有一行注释,应该是正确的,可力扣上就是不过,没有把nums原数组后面的0给覆盖掉,有大神的一定要评论告知一下哈。
代码
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
left, right = 0, 0
while right < len(nums):
if nums[right] != 0:
nums[left] = nums[right]
left += 1
right += 1
else:
right += 1
# return nums[:left] + [0]*(right-left)
for i in range(left, len(nums)):
nums[i] = 0
return nums