给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 :
输入: nums =[0,1,0,3,12]
输出:[1,3,12,0,0]
思路:
arr = [1,3,0,12,0,22] #遍历中,要达到的效果[1,3,12,0,0,22],22又要和第一个0换位置,第一个0的索引又加一,最终[1,3,12,22,0,0
def zeroMove(arr):
l = len(arr)
#要记录两个位置,0的起始位置和遍历到的非零数字的位置,两个位子之间就是数字零,左边就是非零的数字,且是按之前的相对位置进行排列
loc1 = 0
loc2 = 0
while loc2 < l:
#如果arr[loc2]==0:什么都不做,left不变,最后loc2+=1
if arr[loc2] !=0:
#和0互换位置
arr[loc1], arr[loc2] = arr[loc2], arr[loc1]
loc1 += 1
loc2 += 1
return arr