题目:三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子,坊间风闻该“水王”发帖数目超过了帖子数目的一半。如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
思路:首先,不考虑寻找水王的效率问题,只需要两层循环就可以找到水王,从第一个开始判断与其相等的个数,如果最后个数多于一半,那么我们就找到了。
二:考虑到效率问题,我们只用一层循环来找到水王。从第一个开始,与之后的进行比较,如果相等,计数加一,再与后面比较,如果不相同,则越过这两个数,从下两个进行比较,最后得到的就是水王。以下是代码:
其中,select() 方法是不考虑效率,select1()是考虑效率的
package text1; import java.util.Scanner; import java.util.*; public class abc { //输入 static Scanner input = new Scanner(System.in); //生成固定个数id static String id[]; public static void setId(int num) { id = new String[num]; for(int i = 0;i<num;i++) { id[i] = input.next(); } } //挑选水王 public static void select() { int count = 0; for(int i = 0;i<id.length;i++) { for(int j = 0;j<id.length;j++) { if(id[i].equals(id[j])) { count++; } } if(count >= id.length/2) { System.out.println("水王"+id[i]); break; } count = 0; } } public static void select1() { int count = 1; String back = id[0]; for(int i = 1;i < id.length;i++) { if(back.equals(id[i])) {//相等 count++; back = id[i]; }else { count--; if(count<=0) { back = id[i]; //换下一个 count = 1; } } } System.out.println("水王"+back); } public static void main(String args[]) { System.out.println("请输入id个数:"); int num = 0; num = input.nextInt(); setId(num); //挑选水王 //select(); select1(); } }