原題:
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.
思路:
一看到array的In-place的操作,就要聯(lián)想到兩指針。那么兩指針該怎么操作呢?
設(shè)想學(xué)生的排隊問題,一個指針j負責(zé)去找非0的元素回來,一個指針i負責(zé)守住下一個要更新的位置點。找回來的非0元素大膽地去擠占原有元素的位置,剩余的位置全都賦值0就行了。
代碼:
class Solution:
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
i,j = 0,0
while j < len(nums):
if nums[j] == 0:
j += 1
else:
nums[i] = nums[j]
i += 1
j += 1
for p in range(i,len(nums)):
nums[p] = 0