• 课堂练习-水帖之王(水王)


      今天的课堂练习是关于众数的查找。但是在这个枯燥的算法上,老师提出了一个很有意思而且很贴近我们日常上网生活的情景:有一个网友,他在一个吧里发帖数最多,而且占到了一半以上,

    现在给出所有的帖子以及帖主的姓名,现在要求找出这个水帖霸王。

      我们观察题目,其实第一想到的就是用二重循环把每个id对应出现的次数全部都算出来,再进行一次比较,求出次数最大值对应的帖主就是水王。但是,这毕竟不是最优的方法,在老师提出复

    杂度为n的时候,我瞬间就懵了。以前求众数不都是二重循环嘛,一个循环体难道就能实现?

      在我苦思不得其解的时候,老师给出了一个提示:帖数占到了一半以上。在这之前,我明白帖数占到一半以上就一定是发帖最多的用户一定没问题,以为这是两个表达相同意思的条件,但细细

    想却不是这样。我用的二重循环只是利用了发帖最多这个条件,然而发帖数一半呢?

      最后的得出了解题思路,一次循环两两进行比较,如果相同,则暂且把它定为水王,如果不同,则将这俩剔除。这样比较到最后,剩下的那个未抵消的用户就一定是水王本王。

      代码如下:

     1 package tieba;
     2 
     3 import java.util.Scanner;
     4 
     5 class tie
     6 {
     7     private int num;
     8     private String id;
     9     public tie() {};
    10     public tie(int num,String id)
    11     {
    12         this.num=num;
    13         this.id=id;
    14     }
    15     public int getNum() {
    16         return num;
    17     }
    18     public void setNum(int num) {
    19         this.num = num;
    20     }
    21     public String getId() {
    22         return id;
    23     }
    24     public void setId(String id) {
    25         this.id = id;
    26     }
    27     
    28 }
    29 public class tiezi {
    30 
    31     public static void main(String[] args) {
    32         // TODO 自动生成的方法存根
    33            Scanner sc =new Scanner(System.in);
    34              
    35             System.out.println("请输入ID的个数:");
    36             int a=sc.nextInt();
    37             int b[]=new int[a];
    38             System.out.println("请输入ID");
    39             for(int i=0;i<a;i++)
    40             {
    41                 b[i]=sc.nextInt();
    42             }
    43              
    44             int water=b[0];
    45             int k=1;
    46             for(int i=1;i<a;i++)
    47             {
    48                 if(water!=b[i])
    49                 {
    50                     k=k-1;
    51                     if(k<=0)
    52                     {
    53                         water=b[i+1];
    54                         k=1;
    55                         i++;
    56                     }
    57                 }
    58                 else
    59                 {
    60                     water=b[i];
    61                     k=k+1;
    62                 }
    63             }
    64              
    65             System.out.println("水王为"+water);
    66 
    67         
    68     }
    69     
    70     
    71     
    72     }
  • 相关阅读:
    Python异常处理
    Python中的变量作用域,LEGB规则和闭包原理
    Flask实现RESTful API
    Django中自定义实现RESTful API
    Python中的单例模式
    Flask中实现分页
    面向对象进阶
    Flask部分三方模块的使用
    面向对象基础
    在visual studio中设置点击左边选项卡中的类文件,右侧解决方案跳到对应的文件
  • 原文地址:https://www.cnblogs.com/Aduorisk/p/10971541.html
Copyright © 2020-2023  润新知