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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2:

输入: nums = [0] 输出: [0]

Python和双指针都忘得差不多了w

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
l=len(nums)
ls=[]
zero=[]
count=0
for x in nums:
if x==0:
zero.append(count)
count += 1
if len(zero) > 0:
j = zero[0]
else:
j = -1
if j>=0:
for i in range(l):
if nums[i] != 0:
if j < i:
a = nums[i]
nums[i] = 0
nums[j] = a
j = i
ls.append(i)
elif nums[i] == 0:
ls.append(i)
if len(ls) > 0 and j >= ls[0]:
j = ls[0]
ls.pop(0)

直接原地remove,但不知道为什么力扣上过不了样例,pycharm上可以。
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
cnt=0
ls=[]
for i in nums:
ls.append(i)
for i in range(len(nums)):
if nums[i]==0:
ls.remove(0)
cnt+=1
for i in range(cnt):
ls.append(0)
nums=ls.copy()

题解:被自己蠢到了w

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
if not nums:
return 0
# 第一次遍历的时候,j指针记录非0的个数,只要是非0的统统都赋给nums[j]
j = 0
for i in xrange(len(nums)):
if nums[i]:
nums[j] = nums[i]
j += 1
# 非0元素统计完了,剩下的都是0了
# 所以第二次遍历把末尾的元素都赋为0即可
for i in xrange(j,len(nums)):
nums[i] = 0