美文网首页
数组中出现次数超过一半的数字

数组中出现次数超过一半的数字

作者: BluthLeee | 来源:发表于2019-09-28 17:14 被阅读0次

    题目描述

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

    分析

    1. 巧解
    2. 哈希表(面对这一类问题的通解)

    代码

    /*巧解*/
    public class Solution {
        public int MoreThanHalfNum_Solution(int [] array) {
            Arrays.sort(array);
            int count=0;
             
            for(int i=0;i<array.length;i++){
                if(array[i]==array[array.length/2]){
                    count++;
                }
            }
            if(count>array.length/2){
                return array[array.length/2];
            }else{
                return 0;
            }
             
        }
    }
    
    /*用hashmap*/
    import java.util.*;
    public class Solution {
        public int MoreThanHalfNum_Solution(int [] array) {
            HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
             
            for(int i=0;i<array.length;i++){
                 
                if(!map.containsKey(array[i])){
                   map.put(array[i],1);
                }else{
                    int count = map.get(array[i]);
                    map.put(array[i],++count);
                }
            }
            Iterator iter = map.entrySet().iterator();
            while(iter.hasNext()){
                Map.Entry entry = (Map.Entry)iter.next();
                Integer key =(Integer)entry.getKey();
                Integer val = (Integer)entry.getValue();
                if(val>array.length/2){
                    return key;
                }
            }
            return 0;
        }
    }
    

    总结

    着重学习一下HashMap的使用方法

    参考

    HashMap
    牛客网
    Hashmap遍历

    相关文章

      网友评论

          本文标题:数组中出现次数超过一半的数字

          本文链接:https://www.haomeiwen.com/subject/psnhuctx.html