寻找“水王(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; } }