设计思路:水王发的帖子超过总帖子的一半是最关键的信息。而要求算法是O(n),所以不能用排序,那么我们只能遍历一次。把第一个id设为是水王,然后遍历所有的id,如果第i个id和上一个一样,就设一个参数加一,如果不一样,就减一,类似于消掉,将水王的id和其他的id消掉,那么遍历一遍剩下的,就肯定是水王的id。因为他超过总id的一半。
程序代码:
public static void main(String[] args) { // TODO 自动生成的方法存根 String a[]=new String[]{"a","r","b","b","c","a","d","r","r","a","r","a","r","r"}; String b=a[0]; int i=0,n=0; for(i=0;i<13;i++) { if(a[i]==b) { n=n+1; } else { n=n-1; if(n<0) { b=a[i]; n=1; } } } System.out.print("水王为"+b); } }
实验截图:
实验反思。一开始并没有想到这个算法,经过高长直同学的讲解才明白。当时听到老师说类似于消消乐的算法,就有点明白,但是没有把水王的帖子超过一半这个条件给加进去。反而一直在消除上下功夫。还是对程序的认识不够深,在编程中,一定不要忽略题目给的条件,因为那可能是解决这个问题的钥匙 ,要充分考虑这个条件的意思。为什么给这个条件,他有什么用处。这样,编程才会事半功倍。