'''
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
'''

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i = 0
        first = last = i
        while last < len(nums) and first < len(nums):
            if nums[first] == 0:
                while last < len(nums) and nums[last] == 0:
                    last += 1
                if last < len(nums):
                    nums[first], nums[last] = nums[last], nums[first]
            last += 1
            first += 1
        
        
        return nums
'''
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
'''

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        i = 0
        first = last = i
        while last < len(nums) and first < len(nums):
            if nums[first] == 0:
                while last < len(nums) and nums[last] == 0:
                    last += 1
                if last < len(nums):
                    nums[first], nums[last] = nums[last], nums[first]
            last += 1
            first += 1
        
        
        return nums
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 Do not return anything, modify nums in-place instead.