这是一道看似简单的题目。
BJP3 Exercise 7.5: mode
Write a method called mode
that returns the most frequently occurring element of an array of integers. Assume that the array has at least one element and that every element in the array has a value between 0
and 100
inclusive. Break ties by choosing the lower value.
For example, if the array passed contains the values {27, 15, 15, 11, 27}
, your method should return 15
. (Hint: You may wish to look at the Tally
program from earlier in this chapter to get an idea of how to solve this problem.)
我自己的答案,还对了,但是太多for loop了。
public static int mode(int[] arr) {
int max = 0;
int maxFreq = 0;
Arrays.sort(arr);
max = arr[arr.length-1];
int[] count = new int[max + 1];
for (int i = 0; i < arr.length; i++) {
count[arr[i]]++;
}
for (int i = 0; i < count.length; i++) {
if (count[i] > maxFreq) {
maxFreq = count[i];
}
}
for (int i = 0; i < count.length; i++) {
if (count[i] == maxFreq) {
return i;
}
}
return -1;
}