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,为了降低时间复杂度,老师提示用消消乐的思想,后来我们就想到了如何解决。一道题目有好多种解法,我们应当拓宽思路,以后还要多练习写程序,孰能生巧。

  • 相关阅读:
    Checking Types Against the Real World in TypeScript
    nexus pip proxy config
    go.rice 强大灵活的golang 静态资源嵌入包
    几个golang 静态资源嵌入包
    rpm 子包创建学习
    Rpm Creating Subpackages
    ava 类似jest snapshot 功能试用
    ava js 测试框架基本试用
    The Architectural Principles Behind Vrbo’s GraphQL Implementation
    graphql-compose graphql schema 生成工具集
  • 原文地址:https://www.cnblogs.com/maximumminimum/p/4445582.html
Copyright © 2011-2022 走看看