Add Majority Element (#4131)
This commit is contained in:
parent
181906d5f7
commit
8259f0e9cf
@ -0,0 +1,34 @@
|
|||||||
|
package com.thealgorithms.datastructures.hashmap.hashing;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
/*
|
||||||
|
This class finds the majority element(s) in an array of integers.
|
||||||
|
A majority element is an element that appears more than or equal to n/2 times, where n is the length of the array.
|
||||||
|
*/
|
||||||
|
public class MajorityElement {
|
||||||
|
/*
|
||||||
|
This method returns the majority element(s) in the given array of integers.
|
||||||
|
@param nums: an array of integers
|
||||||
|
@return a list of majority elements
|
||||||
|
*/
|
||||||
|
public static List<Integer> majority(int[] nums){
|
||||||
|
HashMap<Integer,Integer> numToCount = new HashMap<>();
|
||||||
|
int n = nums.length;
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
if (numToCount.containsKey(nums[i])){
|
||||||
|
numToCount.put(nums[i],numToCount.get(nums[i])+1);
|
||||||
|
} else {
|
||||||
|
numToCount.put(nums[i],1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<Integer> majorityElements = new ArrayList<>();
|
||||||
|
for (int key: numToCount.keySet()) {
|
||||||
|
if (numToCount.get(key) >= n/2){
|
||||||
|
majorityElements.add(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return majorityElements;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
package com.thealgorithms.datastructures.hashmap.hashing;
|
||||||
|
|
||||||
|
import com.thealgorithms.datastructures.hashmap.hashing.MajorityElement;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class MajorityElementTest{
|
||||||
|
@Test
|
||||||
|
void testMajorityWithSingleMajorityElement() {
|
||||||
|
int[] nums = {1, 2, 3, 9, 9, 6, 7, 8, 9, 9, 9, 9};
|
||||||
|
List<Integer> expected = new ArrayList<>();
|
||||||
|
expected.add(9);
|
||||||
|
List<Integer> actual = MajorityElement.majority(nums);
|
||||||
|
assertEquals(expected, actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testMajorityWithMultipleMajorityElements() {
|
||||||
|
int[] nums = {1, 2, 3, 3, 4, 4, 4, 4};
|
||||||
|
List<Integer> expected = new ArrayList<>();
|
||||||
|
expected.add(4);
|
||||||
|
List<Integer> actual = MajorityElement.majority(nums);
|
||||||
|
assertEquals(expected, actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testMajorityWithNoMajorityElement() {
|
||||||
|
int[] nums = {1, 2, 4, 4, 5, 4};
|
||||||
|
List<Integer> expected = new ArrayList<>();
|
||||||
|
expected.add(4);
|
||||||
|
List<Integer> actual = MajorityElement.majority(nums);
|
||||||
|
assertEquals(expected, actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testMajorityWithEmptyArray() {
|
||||||
|
int[] nums = {};
|
||||||
|
List<Integer> expected = Collections.emptyList();
|
||||||
|
List<Integer> actual = MajorityElement.majority(nums);
|
||||||
|
assertEquals(expected, actual);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user