题目描述:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
解题思路:
先计算出列表中0的个数j==》删除j个0==》结尾补上n个0
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
j=nums.count(0)
for i in range(j):
nums.remove(0)
nums+=[0]*j '''删除全部的0之后一次性加上所有的0'''
===================================================================
或者
for i in range(nums.count(0)):
nums.remove(0)
nums.append(0) '''依次在结尾处加上0'''
速度较慢,但是很好看!!
以下仅做记录==============================
最初的思路(未通过×)
'''
想法一(×):
遍历数组==》遇0删0,结尾补0==》直到所有的0都被加到后面,break
问题:
删补之后的数组虽然解决了数组长度的问题,但是数组前面几位数字有变动,而for循环里i还在往下一位遍历,会跳过0后一位的判断。
'''
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
j=nums.count(0) #计算0个数
for i in range(len(nums)): #遍历数组
if nums[i]==0: #遇0
del nums[i] #删0
nums.append(0) #补0
if i>= (len(nums)-j): #数和0交界处
break #结束循环
'''
想法二(×):
利用remove()依次删除有限个0(解决遍历时因为数组长度变化导致索引过长的问题)==》删除后一次补0
问题:
???使用remove()删不完???有待学习考证
'''
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
j=nums.count(0)
k=0
m=0
for i in nums: #笨蛋删除法
if k
想法一的问题示例:
想法二问题示例:
今日口号:刷题刷题刷题!学习学习学习!