先看代码
运行结果
Number=5
0 2 4 6
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
- 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
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>