zoukankan      html  css  js  c++  java
  • 寻找最水之王

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

      实验截图:

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

  • 相关阅读:
    while循环
    三元运算符
    switch用法
    if判断
    位运算
    逻辑运算符
    赋值运算符和比较运算符
    算术运算符
    数据类型的转换
    线程同步之(条件变量)
  • 原文地址:https://www.cnblogs.com/twentytwo/p/4537076.html
Copyright © 2011-2022 走看看