from __future__ import print_function # Time: O(n) # Space: O(1) # 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. class Solution(object): def moveZeroes(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ pos = 0 for i in xrange(len(nums)): if nums[i]: nums[i], nums[pos] = nums[pos], nums[i] pos += 1 def moveZeroes2(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ nums.sort(cmp=lambda a, b: 0 if b else -1) class Solution2(object): def moveZeroes(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ pos = 0 for i in xrange(len(nums)): if nums[i]: nums[pos] = nums[i] pos += 1 for i in xrange(pos, len(nums)): nums[i] = 0 if __name__ == '__main__': s = Solution() r = s.moveZeroes([0, 1, 0, 3, 12]) print(r)