[Solved] Given an integer array nums, move all 0’s to the end of it while maintaining the relative order of the non-zero elements.

Leetcode solutions MLP Feature Image

Table of Contents

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

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top