zoukankan      html  css  js  c++  java
  • 软件工程——课堂练习“找水王”

    题目:

      三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖 数目超过了帖子数目的一半。
      如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
    一、设计思想
      如果ID表是有序的,由于水王ID超过总贴数一半,则在有序表中的N/2项一定是水王的ID,此时算法的复杂度为O(n*n)
      若想要时间复杂度为O(n),可以遍历ID表,两两相邻的ID进行比较,若不同则删掉,那么在剩余的ID表中水王的ID号仍然超过总数的一半,不断重复这个过程,把列表中ID总数降低,最后剩下的肯定是水王的ID。
    二、源代码
     
     1 package com.java.lianxi;
     2 
     3 public class lianxi7 {
     4     public static void main(String arg[])
     5     {
     6         int[] ids = {1,2,3,1,1,1,2,2,2,4,1,1,1,3,3,1,1,1};  
     7         System.out.println("水王的ID是"+findshuiwang(ids)); 
     8     }
     9     public static int findshuiwang(int[] id)
    10     {            
    11         int n = id.length;  
    12         int shuiwang = 0;  
    13         int count=0;  
    14         for(int i=0;i<n;i++)
    15         {  
    16             if(count == 0)
    17             {  
    18                 shuiwang = id[i];  
    19                 count = 1;  
    20             }  
    21             else
    22             {  
    23                 if(shuiwang == id[i])  
    24                     count ++;  
    25                 else   
    26                     count --;  
    27             }  
    28         }  
    29         return shuiwang;  
    30       }  
    31 }  

    三、截图

    四、心得体会

      拿到这道题,我刚开始想到的就是编历所有id,并对每个ID进行计数,但是不太容易实现,要用到结构体,后来老师提到了遍历然后排序,中间项肯定是水王ID,可是时间复杂度为n*n,为了降低时间复杂度,老师提示用消消乐的思想,后来我们就想到了如何解决。一道题目有好多种解法,我们应当拓宽思路,以后还要多练习写程序,孰能生巧。

  • 相关阅读:
    快速认识ELK中的L
    HBase启动和停止命令
    Kafka 快速起步(作者:杜亦舒)
    Kafka 消息存储及检索(作者:杜亦舒)
    HBase集群搭建
    Kafka消息保证不丢失和重复消费问题
    Kafka文件的存储机制
    Kafka的配置文件详细描述
    kafka常用操作命令
    BZOJ1769 : [Ceoi2009]tri
  • 原文地址:https://www.cnblogs.com/maximumminimum/p/4445582.html
Copyright © 2011-2022 走看看