寻找“水王”

设计思想:

方法实现的前提:水王是数组中出现次数超过一半的数,所以水王-其他>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); //输出水王。
     }

}

 

截图:

 

个人总结:一直没有想出最优解,虽然想到了几点,但是没有把他们结合起来,逻辑思想有待大幅度提高,思想不够全面。

 

posted on 2019-06-02 16:31  小马灬  阅读(88)  评论(0编辑  收藏  举报

导航