Logo
    Logo

    ©️ 2020-2026, Akhil Abraham.

    LinkedInGitHubMediumX
    Akhil Abraham
    Akhil Abraham
    /Posts
    Posts
    /LeetCode
    LeetCode
    /
    LeetCode
    /0283 - Move Zeroes
    0283 - Move Zeroes
    0283 - Move Zeroes
    0283 - Move Zeroes

    0283 - Move Zeroes

    Difficulty
    Easy
    Language
    Python
    URL
    https://leetcode.com/problems/move-zeroes/

    Solution 1 - Two Pointer Swap

    Use a slow pointer k to track the position where the next non-zero element should go. Iterate through the array with a fast pointer. When a non-zero element is found, swap it with the element at position k and increment k. This moves all zeroes to the end while preserving the relative order of non-zero elements.

    TimeComplexity:O(n)TimeComplexity: O(n)TimeComplexity:O(n)
    SpaceComplexity:O(1)SpaceComplexity: O(1)SpaceComplexity:O(1)

    Solution 2 - Overwrite and Fill

    Use a pointer k to track where the next non-zero element should be placed. First pass: iterate through the array and copy each non-zero element to position k, incrementing k. Second pass: fill all remaining positions from k to the end with zeroes.

    TimeComplexity:O(n)TimeComplexity: O(n)TimeComplexity:O(n)
    SpaceComplexity:O(1)SpaceComplexity: O(1)SpaceComplexity:O(1)
    """ 0283.1 - Move Zeroes - Solution 1 - Two Pointer Swap """
    
    #####################################################################################
    # Imports
    #####################################################################################
    from typing import List
    
    #####################################################################################
    # Classes
    #####################################################################################
    class Solution:
        """Solution Class"""
    
        def moveZeroes(self, nums: List[int]) -> None:
            """Move Zeroes Function - modifies nums in-place"""
            k = 0
    
            for i in range(len(nums)):
                if nums[i] != 0:
                    nums[k], nums[i] = nums[i], nums[k]
                    k += 1
    
    
    #####################################################################################
    # Functions
    #####################################################################################
    def testcase():
        """Test Function"""
        nums1 = [0, 1, 0, 3, 12]
        Solution().moveZeroes(nums1)
        print(nums1)  # [1, 3, 12, 0, 0]
    
        nums2 = [0]
        Solution().moveZeroes(nums2)
        print(nums2)  # [0]
    
        nums3 = [1, 0, 0, 2, 3]
        Solution().moveZeroes(nums3)
        print(nums3)  # [1, 2, 3, 0, 0]
    
    
    #####################################################################################
    # Main
    #####################################################################################
    if __name__ == "__main__":
        testcase()
    
    """ 0283.2 - Move Zeroes - Solution 2 - Overwrite and Fill """
    
    #####################################################################################
    # Imports
    #####################################################################################
    from typing import List
    
    #####################################################################################
    # Classes
    #####################################################################################
    class Solution:
        """Solution Class"""
    
        def moveZeroes(self, nums: List[int]) -> None:
            """Move Zeroes Function - modifies nums in-place"""
            k = 0
    
            for num in nums:
                if num != 0:
                    nums[k] = num
                    k += 1
    
            while k < len(nums):
                nums[k] = 0
                k += 1
    
    
    #####################################################################################
    # Functions
    #####################################################################################
    def testcase():
        """Test Function"""
        nums1 = [0, 1, 0, 3, 12]
        Solution().moveZeroes(nums1)
        print(nums1)  # [1, 3, 12, 0, 0]
    
        nums2 = [0]
        Solution().moveZeroes(nums2)
        print(nums2)  # [0]
    
        nums3 = [1, 0, 0, 2, 3]
        Solution().moveZeroes(nums3)
        print(nums3)  # [1, 2, 3, 0, 0]
    
    
    #####################################################################################
    # Main
    #####################################################################################
    if __name__ == "__main__":
        testcase()