Question
Given an integer array nums
, move all 0
‘s to the end of it while maintaining the relative order of the non-zero elements.
Note that you must do this in-place without making a copy of the array.
Example 1:
Input: nums = [0,1,0,3,12] Output: [1,3,12,0,0]
Example 2:
Input: nums = [0] Output: [0]
Constraints:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
Follow up: Could you minimize the total number of operations done?
Python Solution
class Solution: def moveZeroes(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ l = len(nums) def find_z(start): for i in range(start,l): if nums[i]==0: return i def find_nz(start): for i in range(start,l): if nums[i]!=0: return i start=0 if set(nums)=={0}: pass elif 0 not in nums: pass else: while 1: fz = find_z(start) fnz = find_nz(fz) if sum(nums[fz:])==0: break nums[fz],nums[fnz] = nums[fnz],nums[fz] start= fz + 1 if sum(nums[start:])==0: break