码迷,mamicode.com
首页 > 其他好文 > 详细

软件工程——课堂练习“找水王”

时间:2015-04-21 22:23:53      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

题目:

  三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他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,为了降低时间复杂度,老师提示用消消乐的思想,后来我们就想到了如何解决。一道题目有好多种解法,我们应当拓宽思路,以后还要多练习写程序,孰能生巧。

软件工程——课堂练习“找水王”

标签:

原文地址:http://www.cnblogs.com/maximumminimum/p/4445582.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!