From 369d6b8b8da642a54809d4bd98611d781e63d879 Mon Sep 17 00:00:00 2001 From: roshankumar447 Date: Sat, 7 Nov 2026 20:48:30 +0530 Subject: [PATCH] feat: add move-zeroes algorithm with tests --- .../com/thealgorithms/misc/MoveZeroes.java | 28 +++++++++++++++ .../thealgorithms/misc/MoveZeroesTest.java | 36 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 src/main/java/com/thealgorithms/misc/MoveZeroes.java create mode 100644 src/test/java/com/thealgorithms/misc/MoveZeroesTest.java diff --git a/src/main/java/com/thealgorithms/misc/MoveZeroes.java b/src/main/java/com/thealgorithms/misc/MoveZeroes.java new file mode 100644 index 000000000000..31d6eb8dad98 --- /dev/null +++ b/src/main/java/com/thealgorithms/misc/MoveZeroes.java @@ -0,0 +1,28 @@ +package com.thealgorithms.misc; + +/** + * Moves all zeroes in an array to the end while maintaining the relative + * order of non-zero elements. The operation is performed in-place. + * + *

Example: [0, 1, 0, 3, 12] -> [1, 3, 12, 0, 0] + * + *

Time complexity: O(n), Space complexity: O(1) + * + * @see LeetCode #283 + */ +public final class MoveZeroes { + private MoveZeroes() { + } + + public static void moveZeroes(int[] nums) { + int insertPos = 0; + for (int num : nums) { + if (num != 0) { + nums[insertPos++] = num; + } + } + while (insertPos < nums.length) { + nums[insertPos++] = 0; + } + } +} diff --git a/src/test/java/com/thealgorithms/misc/MoveZeroesTest.java b/src/test/java/com/thealgorithms/misc/MoveZeroesTest.java new file mode 100644 index 000000000000..9c26e6b7340e --- /dev/null +++ b/src/test/java/com/thealgorithms/misc/MoveZeroesTest.java @@ -0,0 +1,36 @@ +package com.thealgorithms.misc; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; + +import org.junit.jupiter.api.Test; + +public class MoveZeroesTest { + + @Test + public void testMoveZeroes() { + int[] nums = {0, 1, 0, 3, 12}; + MoveZeroes.moveZeroes(nums); + assertArrayEquals(new int[] {1, 3, 12, 0, 0}, nums); + } + + @Test + public void testNoZeroes() { + int[] nums = {1, 2, 3}; + MoveZeroes.moveZeroes(nums); + assertArrayEquals(new int[] {1, 2, 3}, nums); + } + + @Test + public void testAllZeroes() { + int[] nums = {0, 0, 0}; + MoveZeroes.moveZeroes(nums); + assertArrayEquals(new int[] {0, 0, 0}, nums); + } + + @Test + public void testSingleElement() { + int[] nums = {0}; + MoveZeroes.moveZeroes(nums); + assertArrayEquals(new int[] {0}, nums); + } +}