首页 > 其他 > 详细

寻找“水王”

时间:2019-06-02 17:01:21      阅读:71      评论:0      收藏:0      [点我收藏+]

设计思想:

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

}

 

截图:

技术分享图片

 

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

 

寻找“水王”

原文:https://www.cnblogs.com/sljslj/p/10963318.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!