From b54cc21ade112e20f429964dc86f8543a5605d98 Mon Sep 17 00:00:00 2001 From: Lakshyajeet Singh Goyal <74810454+DarkMatter-999@users.noreply.github.com> Date: Wed, 9 Oct 2024 00:12:24 +0530 Subject: [PATCH] Add NumberAppearingOddTimes algorithm (#5633) --- .../NumberAppearingOddTimes.java | 21 +++++++++++++++++ .../NumberAppearingOddTimesTest.java | 23 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 src/main/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimes.java create mode 100644 src/test/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimesTest.java diff --git a/src/main/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimes.java b/src/main/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimes.java new file mode 100644 index 000000000..ce4e1d88d --- /dev/null +++ b/src/main/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimes.java @@ -0,0 +1,21 @@ +package com.thealgorithms.bitmanipulation; + +/** + * Find the Number Appearing Odd Times in an array + * @author Lakshyajeet Singh Goyal (https://github.com/DarkMatter-999) + */ + +public final class NumberAppearingOddTimes { + private NumberAppearingOddTimes() { + } + public static int findOddOccurrence(int[] arr) { + int result = 0; + + // XOR all elements in the array + for (int num : arr) { + result ^= num; + } + + return result; + } +} diff --git a/src/test/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimesTest.java b/src/test/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimesTest.java new file mode 100644 index 000000000..d10b0f67b --- /dev/null +++ b/src/test/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimesTest.java @@ -0,0 +1,23 @@ +package com.thealgorithms.bitmanipulation; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +class NumberAppearingOddTimesTest { + + @Test + void testFindOddOccurrence() { + int[] arr1 = {5, 6, 7, 8}; + assertEquals(12, NumberAppearingOddTimes.findOddOccurrence(arr1)); + + int[] arr2 = {2, 3, 5, 4, 5, 2, 4, 3, 5, 2, 4, 4, 2}; + assertEquals(5, NumberAppearingOddTimes.findOddOccurrence(arr2)); + + int[] arr3 = {10, 10, 20, 20, 30}; + assertEquals(30, NumberAppearingOddTimes.findOddOccurrence(arr3)); + + int[] arr4 = {-5, -5, -3, -3, -7, -7, -7}; + assertEquals(-7, NumberAppearingOddTimes.findOddOccurrence(arr4)); + } +}