zoukankan      html  css  js  c++  java
  • 输入n个数,其中一个数的个数大于等于n/2,请输出那个数

    问题描述:输入n个数,其中一个数的个数大于等于n/2,请输出那个数

    例如:

    输入:

    18

    3 3 5 4 3 2 4 2 3 3 4 5 2 13 3 3 3 3

    输出:3

    第一种方法:用map集合做,key-value分别对应数组元素和出现次数,代码如下:

    /**
         * 
         * @param arr  传入数组
         * @param n    数组长度
         */
        public static void code(int[] arr,int n){
            Map<Integer,Integer> mp = new HashMap<Integer,Integer>();
            for(int i = 0;i<n;i++){
                if(!mp.containsKey(arr[i])){
                    int count = 0;
                    mp.put(arr[i],++count);
                    for(int j = i+1;j<n;j++){
                        if(arr[j] == arr[i]){
                            mp.put(arr[j],++count);
                        }
                    }
                }
            }
            for(Map.Entry<Integer,Integer> e : mp.entrySet()){
          //这块if判断需要注意的是,当数组长度为奇数时,获取的value值要大于n/2。为偶数大于等于n/2
    if(e.getValue()>n/2 && n%2 == 1 || e.getValue()>=n/2 && n%2 == 0){ System.out.println(e.getKey()); return; } } }

    第二种方法:

    先看下面几个例子,蓝色是下标,先对输入数组排序(升序)

    偶数个元素
    0    1    2    3    4    5
    
    1    1    1    2    2    3    这个输出1
    
    1    2    2    3    3    3    这个输出3        
    
    1    2    2    2    3    3    这个输出2
    
    
    奇数个元素
    0    1    2    3    4
    
    1    1    1    2    2        这个输出1
    
    1    2    2    2    3        这个输出2

    从上面的例子可以看出,当数组长度为奇数时,直接返回下标为n/2的值,当数组长度为偶数时,如果第一个元素和n/2-1下标对应元素相等就返回第一个元素,否则返回下标为n/2的值,代码如下:

    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入数组大小");
            int n = sc.nextInt();
            int[] arr = new int[n];
            for(int i = 0;i<n;i++){
                arr[i] = sc.nextInt();
            }
            Arrays.sort(arr);
            if(n%2 == 0 &&arr[n/2-1] == arr[0]){
                System.out.println(arr[0]);
            }else{
                System.out.println(arr[n/2]);
            }
    
        }
    }
  • 相关阅读:
    Django之url路由
    Django之setting文件
    Diango之通过form表单向服务端发送数据
    Django之win7下安装与命令行工具
    Linux学习之查看系统资源命令总结(二十二)
    实现简单的web框架
    Linux下发送邮件
    Linux学习之日志管理(二十一)
    Shell学习之结合正则表达式与通配符的使用(五)
    Linux学习之后台任务与定时任务(二十)
  • 原文地址:https://www.cnblogs.com/du001011/p/10920800.html
Copyright © 2011-2022 走看看