diff --git a/src/searching/MajorityElement.java b/src/searching/MajorityElement.java new file mode 100644 index 000000000000..7f47849632c4 --- /dev/null +++ b/src/searching/MajorityElement.java @@ -0,0 +1,26 @@ +package searching; + +/** + * LeetCode Problem 169: Majority Element + * Boyer-Moore Voting Algorithm + */ +public class MajorityElement { + public static int findMajority(int[] nums) { + int count = 0; + Integer candidate = null; + + for (int num : nums) { + if (count == 0) { + candidate = num; + } + count += (num == candidate) ? 1 : -1; + } + + return candidate; + } + + public static void main(String[] args) { + int[] nums = {2, 2, 1, 1, 1, 2, 2}; + System.out.println("Majority element: " + findMajority(nums)); + } +} diff --git a/src/test/java/search/MajorityElementTest.java b/src/test/java/search/MajorityElementTest.java new file mode 100644 index 000000000000..2ce16539ca91 --- /dev/null +++ b/src/test/java/search/MajorityElementTest.java @@ -0,0 +1,26 @@ +package search; + +import searching.MajorityElement; +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +public class MajorityElementTest { + + @Test + public void testMajorityElement1() { + int[] nums = {3, 3, 4, 2, 3, 3, 3}; + assertEquals(3, MajorityElement.findMajority(nums)); + } + + @Test + public void testMajorityElement2() { + int[] nums = {2, 2, 1, 1, 2, 2}; + assertEquals(2, MajorityElement.findMajority(nums)); + } + + @Test + public void testMajorityElementSingle() { + int[] nums = {1}; + assertEquals(1, MajorityElement.findMajority(nums)); + } +}