先看代碼
import java.util.Arrays;
/**
* 得到數組中最有效的元素和下標.<br>
* 最有效的只出現頻率超過長度一半的數據。
*
* @author 趙學慶 www.java2000.net
*/
public class MyTest {
public static void main(String[] args) {
int[] values = new int[] { 5, 3, 5, -5, 5, 0, 5 };
int maxValue = getMax(values);
if (maxValue > Integer.MIN_VALUE) {
System.out.println("Number=" + maxValue);
for (int i = 0; i < values.length; i++) {
if (values[i] == maxValue) {
System.out.print(i + " ");
}
}
} else {
System.out.println("沒有找到");
}
}
public static int getMax(int[] values) {
int[] nums = Arrays.copyOf(values, values.length);
Arrays.sort(nums);
int number = Integer.MIN_VALUE;
int count = 0;
int numbertemp = Integer.MIN_VALUE;
int counttemp = 0;
for (int num : nums) {
if (num == numbertemp) {
// 增加當前
counttemp++;
} else {
// 判斷是否比前一個大
if (counttemp > count) {
number = numbertemp;
count = counttemp;
}
// 設置當前
numbertemp = num;
counttemp = 1;
}
}
// 判斷是否比前一個大
if (counttemp > count) {
number = numbertemp;
count = counttemp;
}
if (1.0 * count / nums.length > 0.5) {
return number;
}
return Integer.MIN_VALUE;
}
}
運行結果
Number=5
0 2 4 6