移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序

1
2
input = [0,1,0,3,12]
res = [1,3,12,0,0]

双指针

一个指针不动,遍历另一个指针,从第一位开始遍历,如果这个数字不为0,则往前放,跟i指针的交换位置,并且i指针往前移1位

为0的话,i指针保持不动

i指针是从前开始一点点加,碰到不为0的就放到i这个位置,并把i往后移,最终不为0的都会放到i上,则后面的都是0

1
2
3
4
5
6
7
8
9
10
11
12
func moveZeroes(nums []int) []int  {
i := 0
for j := 0; j < len(nums); j++ {
if nums[j] != 0 {
a := nums[i]
nums[i] = nums[j]
nums[j] = a
i++
}
}
return nums
}

python一行解法

匿名函数排序:lambda x:x==0,匿名函数,x是否==0,是的话,返回true,不是的话返回false

sort排序:key为false,ture, false在true前面,所以,不等于0的就排到了前面

1
2
3
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
nums.sort(key=lambda x:x==0)