课堂测试之找水王

  题目:三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他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();
    }
}
原文地址:https://www.cnblogs.com/liyuchao/p/10963857.html