""" 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()