• 课堂练习-找水王


    题目:

    三人行设计了一个灌水论坛。信息学院的学生都喜欢在上面交流灌水,传说在论坛上有一个“水王”,他不但喜欢发帖,还会回复其他ID发的每个帖子。坊间风闻该“水王”发帖数目超过了帖子数目的一半。
    如果你有一张当前论坛的帖子(包括回帖)列表,其中帖子的作者的ID也在其中,你能快速的找到这个传说中的水王吗?

    设计思想:

    最简单的思路就是:统计每一个ID出现的次数,然后找出出现最多的ID就是水王。

    第二种更优的思路就是:利用水王发帖次数大于一半,然后两两一消,从第一个数开始,如果等于它的下一位,number+1,
     如果不等于,number-1,不等于相当于把这两个帖子都删除,直接从这两个的后一个开始。
     最后由于水王发帖数大于一半,不管怎样,它肯定会被剩下,从而得出水王ID。

    代码实现:

    法一:

    public class ShuiW {
    /*	法一:统计每一个ID出现的次数
     public static int tj(int[][] array,int number) {
    		int sum = 0;
    		for(int i = 0; i < array.length;i++) {
    			if(array[i][1] == number) {
    				sum = sum + 1;
    			}
    		}
    		return sum;		
    	}
    	
    	public static void main(String args[]) {
    		int [][] a = {{1,1},{2,2},{3,5},{4,1},{5,5},{6,5},{7,5},{8,5},{9,5},{10,7}};
    		int[][] ID = new int[a.length][2];
    		for(int i = 0;i < a.length;i++) {
    			ID[i][0] = tj(a,a[i][1]);次数
    			ID[i][1] = a[i][1];数
    		}
    		int max = ID[0][0];
    		int p = 0;		
    		for(int j = 1 ; j < ID.length; j ++) {
    			if(ID[j][0] > max) {
    				max = ID[j][0];
    				p = ID[j][1];				
    			}
    		}
    		System.out.println("最多"+max+"次,数为"+p);
    	}
    	}
    

      

    法二:

    public static int find(int[] array)  
    	    {  
    	        int size = array.length;  
    	        int result = 0;
    	        int number = 0;
    	        for (int i = 0; i < size; i++)  
    	        {  
    	            
    	            if (number == 0)  
    	            {  
    	                result = array[i];  
    	                number = 1;  
    	            }  
    	            else  
    	            {  
    	                if (result == array[i])  
    	                {  
    	                    ++number;  
    	                }  
    	                else  
    	                {  
    	                    --number;  
    	                }  
    	            }  
    	        }  
    	  
    	        return result;  
    	    }  
    		public static void main(String[] args)  
    			    {  
    			        int[] array =  
    			        {  
    			                2, 3, 2, 3, 7, 3, 9,3, 6,3, 1,3, 4,3, 10,3,3
    			        };  
    			        System.out.println("水王的ID:"+find(array));  
    			    }  			  
    

      

    实现截图:

    法1:

     法2.:

    个人总结:

    通过本次课堂练习,我得出一个重要的结论就是,一定要读懂题,将其分析透彻,自己一开始就是不懂利用水王发帖数目超过了帖子数目的一半这个条件以至于没有好的思路,后来经同学和老师提醒,才有了眉目。

  • 相关阅读:
    redis 缓存验证码 步骤
    方法返回值 前面的<T>是什么?
    spring boot的运行原理
    在本地tomcat中调试Spring boot项目遇到的一些问题
    UEditor中上传图片的步骤
    总结彻底解决Spring MVC+Mybatis中文乱码问题
    ueditor1.4.3二次开发添加自定义Dialog
    UEditor之图片上传如何和真实项目结合
    UEditor之实现配置简单的图片上传示例 (转)
    Java比较运算符
  • 原文地址:https://www.cnblogs.com/zzstdruan1707-4/p/10963185.html
Copyright © 2020-2023  润新知