寻找最水之王

设计思路:水王发的帖子超过总帖子的一半是最关键的信息。而要求算法是O(n),所以不能用排序,那么我们只能遍历一次。把第一个id设为是水王,然后遍历所有的id,如果第i个id和上一个一样,就设一个参数加一,如果不一样,就减一,类似于消掉,将水王的id和其他的id消掉,那么遍历一遍剩下的,就肯定是水王的id。因为他超过总id的一半。

程序代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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);
 
        }
         
    }

  实验截图:

实验反思。一开始并没有想到这个算法,经过高长直同学的讲解才明白。当时听到老师说类似于消消乐的算法,就有点明白,但是没有把水王的帖子超过一半这个条件给加进去。反而一直在消除上下功夫。还是对程序的认识不够深,在编程中,一定不要忽略题目给的条件,因为那可能是解决这个问题的钥匙 ,要充分考虑这个条件的意思。为什么给这个条件,他有什么用处。这样,编程才会事半功倍。

posted @   twenty丶two  阅读(144)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示