题目描述:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
方法一:暴力双重循环 i j两个指针一前一后进行交换排序
if len(nums) == 1:
return nums
i = 0
j = 1
k = 0
while k <= len(nums):
while i < len(nums)-1:
if nums[i] == 0:
temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
i = i + 1
j = j + 1
k = k + 1
i = 0
j = i + 1
return nums
不出所料,超出了时间限制。
方法二:思路是只关注非零元素 最后统一填0
i j 一前一后 分两次循环 先关注所有的非0数字 后填充0
def moveZeroes(nums):
if len(nums) == 1:
return nums
i = 0
j = 0
# 第一个while循环的目的 i指针自动跳过前面的0 j指针指过的就是最终排序
while i < len(nums):
if nums[i]!=0:
nums[j]=nums[i]
j = j + 1
i = i + 1
# 第二个while循环的目的 该排的数字已经排好了 把剩下的0填充
while j < len(nums):
nums[j] = 0
j = j + 1
return nums