寻找“水王(WaterKing)”

问题重述:三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。

如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

设计思路:水王嘛,整个论坛属他的发帖数最多,所以我们首先对论坛中所有水友的ID号进行遍历分析,定义三个变量,其中一个变量对当前遍历到的水友的ID号进行记录,然后用另一个变量去记录第二位水友的ID号,如果两次记录相同,则第三个变量加一,一直遍历,因为水王发帖数最多,所以他的ID号一定可以PK掉其他水友,保持记录到最后

代码实现:

package com.java.fmd;

public class waterking {

    public static void main(String[] args) {
        String[] ids={"001","004","001","004","001","004","001","004","001","001","003","003","001","003","003","003"};
        String[] result = Find(ids);
        for(int i = 0;i<result.length;i++){
            //System.out.println(result[i]);
        }
    }
    public static String[] Find(String[] ids){
        if(ids == null) return null;
        String candate0= null;
        String candate1= null;
        String candate2= null;
        int times0 = 0;
        int times1 = 0;
        int times2 = 0;
        int len = ids.length;
        for(int i =0;i<len;i++){
            if(times0==0&&ids[i]!=candate1&&ids[i]!=candate2){
                candate0=ids[i];
                times0++;
            }
            else if(times1==0&&ids[i]!=candate0&&ids[i]!=candate2){
                candate1=ids[i];
                times1++;
            }
            else if(times2==0&&ids[i]!=candate0&&ids[i]!=candate1){
                candate2=ids[i];
                times2++;
            }
            else if(ids[i]!=candate1&&ids[i]!=candate0&&ids[i]!=candate2){
                times0--;
                times1--;
                times2--;
            }
            else if(ids[i]==candate0)
                times0++;
            else if(ids[i]==candate1)
                times1++;
            else if(ids[i]==candate2)
                times2++;
        }
        String[] result = {candate0,candate1,candate2};
        System.out.println("水王:");
        System.out.println(candate2);
        return result;
    }
 
}

 

posted @ 2019-06-02 23:40  符黑石  阅读(283)  评论(0编辑  收藏  举报