zoukankan      html  css  js  c++  java
  • 课堂练习之找水王

    一、问题描述

        三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,
      他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
        如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
    二、设计思路
        因为由题知,水网的发帖量超过了总发帖量的一半,所以将所有id找出来的排列形式有两种可能,一种是,水王的id一直没有连续,中间被中断,在这种情况下,水王的id一定在第一个和最后一个,第二种情况,水王的id要相邻,方法就是,先将第一个id设为水王,再将与后面的id进行比较,如果相等,就让一个计数器加一,否则就让下一个id设为水王,这样就将出现次数最多的id找出来了。
    三、实验代码
     1 class ZSW 
     2 {
     3     public static void main(String[] args) 
     4     {
     5         //int[] arr = {5,1,5,23,5,4,5,6,5,7,5};//水王id不相邻
     6         int[] arr = {15,5,23,5,5,5,4,5,6,5,7,5};
     7         int c = 0;  
     8         int sw = 0;
     9         for(int i=0;i<arr.length;i++)
    10         {
    11             if(c==0)                
    12             {
    13                 sw=arr[i];            
    14                 c++;
    15             }
    16             else
    17             {
    18                 if(sw==arr[i])        //如果预设的水王id与当前id相同,
    19                     c++;            //计数器就加一
    20                 else
    21                     c--;  //如果不相等,当减到0的时候,就将当前的id作为水王
    22             }
    23         }        
    24         System.out.println(sw);//就将出现次数最多的id输出
    25     }
    26 }

    四、实验截图

    五、心得体会
     找水王这道例子,是一道很典型的例子,有很多的解题思路,最好想的就是将所有id都按顺序排列起来,借助水王的发帖量
     是超过一半的,因此二分之一处一定是水王,但是在课堂上,老师的意思是,不能用排序,只用一次遍历,就将水王找出来
     ,先将第一个id设为水王,再将与后面的id进行比较,如果相等,就让一个计数器加一,否则就让下一个id设为水王,这就是典型的匹配计数问题,

    让出现次数最多的那个id返回出来。

  • 相关阅读:
    Android基础
    Android基础
    Java小项目——多线程弹球
    Java小项目——抽奖系统
    Java小项目——五子棋
    Java小项目——画板
    Java基础——swing登录界面
    Java基础——类的继承
    实验室资料说明
    20180919 百信、百度面试
  • 原文地址:https://www.cnblogs.com/KevinBin/p/4451551.html
Copyright © 2011-2022 走看看