zoukankan      html  css  js  c++  java
  • 找水王

    首先,这道测试的关键所在就是水王的发帖数目在一半以上,而且要只通过一次遍历,不能新定义数组开辟新的空间。

    其次,我的思路也是上课同学给的思路吧,自己课下仔细研究了一下,第一次是通过多次遍历从而求出出现次数最对的元素,第二次才是对算法进行来了优化。

    优化方法:既然水王的发帖数目在一半以上,也就是ID出现的次数在一半以上,所以一定会有两个相邻且相同的ID,而只需一次遍历,将出ID相同次数最多的ID输出即可,通过一个变量记录出现的次数,如果后面的相同,则次数+1,否则-1,直到次数=0时需要从新开始计数,最后的返回值即水王的ID:

    该测试的代码如下:

    package text;
    
    
    public class Max {
        
        public void test1(int []arr,int n) //测试
        {    
            int max=count(arr, arr[0]);
            int num=0;
            
            for(int i=1;i<5;i++)
            {
                if(max<count(arr, arr[i]))
                {
                    max=count(arr, arr[i]);
                    num=i;
                }
            }
            System.out.println("水王ID为:"+arr[num]);
                    
        }
        public int count( int []arr,int a)
        {
            int num=0;
            for(int i=0;i<arr.length;i++)
            {
                if(arr[i]==a)
                {
                    num++;
                }
            }
            return num;
        }
        public int test2(int arr[],int n){
    
            int answer=arr[0];
    
            int num=1;
    
            for (int i=0;i<n;i++){
    
                if (num==0){//如果前面都不对,更新为最新数字
    
                    answer=arr[i];
    
                    num=1;
    
                }else
    
                if (arr[i]==answer){//如果相等
    
                    num++;
    
                }else{//如果不相等
    
                    num--;
    
                }
    
            }
    
            return answer;
    
        }
        
        
        
        public static void main(String[] args) {
            int []arr= {1,1,2,3,1};
            System.out.println("帖子ID为:");
            for(int i=0;i<5;i++)
            {
                System.out.print(arr[i]+" ");
            }
            Max max=new Max();
    System.out.println(); System.out.println(
    "方法一:"); max.test1(arr,5); System.out.println("方法一:"); System.out.println("水王ID为:"+max.test2(arr,5)); } }

  • 相关阅读:
    看门狗定时器
    fork 和 exec
    openwrt procd分析
    减肥经验总结
    gcc
    laravel5验证码
    laravel5通过auth.attempt事件加入登陆验证码
    双向链表
    mysql5.6源码安装
    laravel4通过控制视图模板路劲来动态切换主题
  • 原文地址:https://www.cnblogs.com/qianmo123/p/10951752.html
Copyright © 2011-2022 走看看