Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions Maths/Mode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package Maths;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;

/*
* Find the mode of an array of numbers
*
* The mode of an array of numbers is the most frequently occurring number in the array,
* or the most frequently occurring numbers if there are multiple numbers with the same frequency
*/
public class Mode {

public static void main(String[] args) {

/* Test array of integers */
assert (mode(new int[]{})) == null;
assert Arrays.equals(mode(new int[]{5}), new int[]{5});
Comment thread
gijsh21 marked this conversation as resolved.
assert Arrays.equals(mode(new int[]{1, 2, 3, 4, 5}), new int[]{1, 2, 3, 4, 5});
assert Arrays.equals(mode(new int[]{7, 9, 9, 4, 5, 6, 7, 7, 8}), new int[]{7});
assert Arrays.equals(mode(new int[]{7, 9, 9, 4, 5, 6, 7, 7, 9}), new int[]{7, 9});

}

/*
* Find the mode of an array of integers
*
* @param numbers array of integers
* @return mode of the array
*/
public static int[] mode(int[] numbers) {

if(numbers.length == 0) return null;

HashMap<Integer, Integer> count = new HashMap<>();

for(int num : numbers) {
if(count.containsKey(num)) {

count.put(num, count.get(num) + 1);

} else {

count.put(num, 1);

}

}

int max = Collections.max(count.values());
ArrayList<Integer> modes = new ArrayList<>();

for(int num : count.keySet()) {
if(count.get(num) == max) {
modes.add(num);
}
}
return modes.stream().mapToInt(n -> n).toArray();
}

}