寻找最水之王

设计思路:水王发的帖子超过总帖子的一半是最关键的信息。而要求算法是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);

	    }
		
	}

  实验截图:

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

原文地址:https://www.cnblogs.com/twentytwo/p/4537076.html