Move Zeroes (Leetcode 283)

Dutch National Flag Algorithm doesn't guarantee the order of elements

Problem Link: https://leetcode.com/problems/move-zeroes/

If order of elements matter:

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        
        # If order matters, use the below code
        n=len(nums)
        i=0
        j=0
        while(j<n):
            if(nums[j]!=0):
                nums[i],nums[j]=nums[j],nums[i]
                j+=1
                i+=1
            else:
                j+=1

If order of elements doesn't matter (Dutch National Flag Algo):

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        
        n=len(nums)
        # If order doesn't matter, use Dutch National Flag Algorithm 
        i=0
        j=n-1
        while(i<j):
            if(nums[i]==0 and nums[j]!=0):
                nums[i],nums[j]=nums[j],nums[i]
                i+=1
                j-=1
            elif(nums[i]!=0 and nums[j]==0):
                i+=1
                j-=1
            elif(nums[i]==0 and nums[j]==0):
                j-=1
            elif(nums[i]!=0 and nums[j]!=0):
                i+=1

Last updated