编程思路:
水王是发帖最多的人,如果用传统的思想来遍历去计数,计算每个id出现多少次再去比较固然能算出来,可是时间复杂度高。我们转换思路重新分析这道题。
水王的特点为:(1)每贴必回(2)水王的发贴数超过总贴数的一半;
从头开始遍历,对可能成为水王的人的id进行计数,如果后边的跟他相同就加一,不同就减一,如果为0就重新选择水王。因为水王发的帖子大于一半,所以剩下的就是水王。
import java.util.Scanner; /* * 寻找水王 */ public class ShuiWang { public static void main(String[] args) { int[] a = null; Scanner sc = new Scanner(System.in); System.out.println("帖子总个数:"); int sum = sc.nextInt(); a = new int[sum]; System.out.println("输入每个帖子的作者:"); for(int i = 0;i < sum;i++) { a[i] = sc.nextInt(); } sc.close(); int n = 0; int id = -1; for(int i=0;i<a.length;i++) { if(n==0) { id=a[i]; n=2; } else { if(id==a[i]) { ++n; } else { --n; } } } System.out.println("水王的ID是 : " + id); } }
程序执行结果:
总结:
要学会分析问题,发现“水王”的特点,转换思考方式。
没有实现随机生成发帖的id。