要求:
Given an array nums
, write a function to move all 0
's to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12]
, after calling your function, nums
should be [1, 3, 12, 0, 0]
.
Note:
- You must do this in-place without making a copy of the array.
- Minimize the total number of operations.
解法:从左到右遍历一次,用zero_count记录0出现的次数,对于非零元素,往左移动zero_count位。结束后对最后zero_count位赋值为0。
代码:
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
length = len(nums)
if length <= 1:
return
zero_count = 0
i = 0
while i < length:
if nums[i] == 0:
zero_count += 1
else:
nums[i - zero_count] = nums[i]
i += 1
j = 1
while j <= zero_count:
nums[length - j] = 0
j += 1