题目描述:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums =[0,1,0,3,12]
输出:[1,3,12,0,0]
示例 2:
输入: nums =[0]
输出:[0]
提示:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
我的作答:
果然脱离了教程自己想方法就明白什么是“纸上得来终觉浅”了,一道简单题自己写得和垃圾一样。。
我的有点像两两交换,被快慢指针限制了思路。。陷进去了。。又冗长又容易出错。。
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
for slow in range(len(nums)-1):
if nums[slow]==0:
fast = slow+1
while fast<len(nums)-1 and nums[fast]==0:
fast += 1
nums[slow] = nums[fast]
nums[fast] = 0
return nums
参考:
只要将非零元素逐个拎出来就行了。。我。。。好。。傻。。
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
j = 0 # 记录非零元素应该放置的位置
# 遍历数组,将非零元素移动到前面
for i in range(len(nums)):
if nums[i] != 0:
nums[j] = nums[i]
j += 1
# 将剩余的位置设置为0
for i in range(j, len(nums)):
nums[i] = 0
标签:slow,nums,元素,len,range,hot100,数组,移动,刷题 From: https://blog.csdn.net/Aerochacha/article/details/145212041