问题描述
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
方法一
1.代码和思路:
这里采用遍历数组中的数找到0就删除并且在nums末尾append(0),因为在数组中非末尾删除元素时间复杂度为O(n),总的算法复杂度较高
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
for i in nums:
if i==0:
nums.remove(i)
nums.append(0)
2.运行结果:
可想而知这么高的算法复杂度结果也不好
方法二
1.代码和思路:
这里用到的方法在于先找到第一个0的位置将该位置的值传递给i和0标志位j,继续检查如果检查到非0,则将位置i与j的元素互换,如果j+1位置的元素为0则0标志位j的值为j+1否则为i
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
i,n=0,len(nums)
while i<n-1 and nums[i] != 0:i += 1
j=i
while i<n-1:
i += 1
if nums[i]:
nums[j]=nums[i]
nums[i]=0
if nums[j+1]==0:
j += 1
else:j=i
2.结果: