设计思想:
方法实现的前提:水王是数组中出现次数超过一半的数,所以水王-其他>0.
通过对数组中的值两两比较,相同则count+1,不同count-1;默认a[1]是水王,当a[1]≠其他且count=0后,默认下一个数是水王。继续向下比较,最后剩下的就是水王。
代码:
public class shui { public static void main(String[] args) { int a[]= {2,1,1,1,3}; int length=a.length; FindMostData(a, length); } public static void FindMostData(int a[], int length) { int sw = 0; // 出现次数超过一半的数; int count = 0; // 记录,用来判断一个数是否是水王; //方法能实现的前提:水王是数组中出现次数超过一半的数,所以水王-其他>0. //所以:两两比较,相同则count+1,不同count-1;默认a[1]是水王,当a[1]≠其他且count=0后,默认下一个数是水王。继续向下比较。 for (int i = 0; i < length; i++) { if (count == 0) // count为0时,表示当前的sw需要重选; { sw = a[i]; count = 1; } else { if (sw == a[i]) count++; //+1保证水王不变。 else count--; //-1为了找到真正的水王。 } } System.out.println(sw); //输出水王。 } }
截图:
个人总结:一直没有想出最优解,虽然想到了几点,但是没有把他们结合起来,逻辑思想有待大幅度提高,思想不够全面。