找水王
找水王的题目为:
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
思路:若水王的id出现的次数超过一半以上,则他一定是水王,从一组id的数组里找出现次数最多的id,每个id出现的次数相互抵消,最后剩下的id一定是水王
代码为:
package 找水王; public class find { public static int king(int[] a) { int s = a.length; int r = 0;// 需要查找的结果 int t = 0;// 出现的次数 for (int i = 0; i < s; i++) { // 如果次数等于0,重新指定结果 if (t == 0) { r = a[i]; t = 1; } else //水王的贴与其他人的贴相互抵消,剩下的一定是水王的 { if (r == a[i]) { ++t; } else { --t; } } } return r; } public static void main(String[] args) { int[] a = {1,2,1,2,5,7,8,2,2,2,2,4,2}; System.out.println("水王的ID为:"+king(a)); } }
一开始对找水王没有解题思路,其实就是找出出现次数超过一半的id就是水王。
运行结果为: