【leetcode】283.Move Zeroes
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.
基本思路
两个指针
一个在前面,另一个先指向下一个非零
前面的指针再往后挪,找到第一个0,两个数交换循环
复杂度
交换次数=非零数字数目;查询次数=n
空间复杂度可以不考虑
写的不好看。。
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
prePos, lastPos
"""
prePos = 0
numsLen = len(nums)
for lastPos in range(0, numsLen):
if nums[lastPos] == 0:
continue
else:
for prePos in range(prePos, lastPos):
#exchange
if nums[prePos] == 0:
if prePos == lastPos:
break
temp = nums[lastPos]
nums[lastPos] = nums[prePos]
nums[prePos] = temp
prePos = prePos+1
break