[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.

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
Abhishek Sharma
Abhishek Sharma

Started my Data Science journey in my 2nd year of college and since then continuously into it because of the magical powers of ML and continuously doing projects in almost every domain of AI like ML, DL, CV, NLP.

Articles: 517

Leave a Reply

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