题目
三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一 个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?
思想:
水网发帖数超过总帖子数量的一半,所以将id两两比较,不相同就删除,直到最后剩下的就是水王
package Check; import java.util.Random; public class Main { public static void main(String args[]) { int[] ID = new int[100]; for (int i = 0; i < ID.length; i++) {//循环给数组中的每个元素赋初值 ID[i] = (int) (Math.random() * 6);//产生随机数并赋值给数组 } for (int i = 0; i < ID.length; i++) { System.out.println(ID[i]); } int[] p = new int[6]; for(int i = 0; i < ID.length; i++) { if(ID[i] == 1) p[0]++; if(ID[i] == 2) p[1]++; if(ID[i] == 3) p[2]++; if(ID[i] == 4) p[3]++; if(ID[i] == 5) p[4]++; if(ID[i] == 6) p[5]++; } int max = 0; for(int i = 0;i<6;i++) { if(ID[i]>ID[max]) max = i; } System.out.println("水王为"+max); int[] k = new int[9]; k[0] = 1; k[1] = 1; k[2] = 2; k[3] = 1; k[4] = 2; k[5] = 2; k[6] = 2; k[7] = 1; k[8] = 1; int result = k[0]; int times = 0; for(int i = 0; i < 9; i++) { if(k[i] == result) times++; else times--; if(times == 0) { result = k[i]; times = 1; } } System.out.println("水王为"+result); } }
总结
整体来说不是太难,要实现功能还是比较简单的,但是真的要做到时间复杂度为O(n)却不容易。
需要用不一样的方法。
多创新的去思考,不能让自己的思维局限在一定的位置。