题解 | #数组中出现次数超过一半的数字#

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

http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163

判断给定的array长度是否为零,为零则没有这样符合条件的数字,直接return 0
我们创建一个hashmap,然后遍历这个array,hashmap的key是array里的不同数字,value是这些数字出现在array里的次数
我们遍历hashmap,检测value(即当前数字出现的次数)是否大于数组array长度的一半,如果有这个数字,我们return回key(即当前遍历到的数字),如果我们走完了整个hashmap还没有发现这样一个数字,我们需要return 0
import java.util.*;

public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        if(array.length == 0){
            return 0;
        }

        int len = array.length;
        int threshold = len/2;
        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0; i < len; i++){
            if(!map.keySet().contains(array[i])){
                map.put(array[i],1);
            }else{
                map.put(array[i],map.get(array[i])+1);
            }
        }

        for(Integer key: map.keySet()){
            if(map.get(key) > threshold){
                return key;
            }
        }

        return 0;
    }
}

法二

import java.util.*;
public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
       HashMap<Integer, Integer> map = new HashMap<>();
        if (array.length==0){return  0;}
        for (int i = 0; i < array.length; i++) {
            if (!map.containsKey(array[i])){
                map.put(array[i],1);
            }
            else {
                Integer integer = map.get(array[i])+1;
                map.put(array[i],integer);
            }
        }

//        int max=0;
        ArrayList<Integer> list = new ArrayList<>();

        Iterator<Map.Entry<Integer, Integer>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry<Integer, Integer> entry = iterator.next();
            Integer value = entry.getValue();
            list.add(value);
        }
        Collections.sort(list);
        System.out.println(list);
        Integer max = list.get(list.size()-1);
        System.out.println(max);

        Iterator<Map.Entry<Integer, Integer>> iterator2 = map.entrySet().iterator();

        while (iterator2.hasNext()) {
            Map.Entry<Integer, Integer> value = iterator2.next();
            if (max == value.getValue()) {
                max=value.getKey();
//                return value.getKey();
            }
        }
        return max;
    }
}
全部评论

相关推荐

亲爱滴达瓦里氏:又有嵌软又有FPGA又有硬件的,三个方向显得你的简历太杂糅了,展示不出你在某一个方向有哪些技术栈。基本上也不会有企业会去招一个本科的全栈工程师。HR一般是看你的技术栈是否和招聘要求匹配才发面试的。如果你想三个方向都试试的话还是建议你分成三份不同的简历根据不同岗位来投。多看看****或牛客上面的招聘信息,根据上面要求的技术栈来写简历。看了你的帖子经历这一块还是过关的,不过看的每个方向都会一点,但每个方向优势都不突出。 还有就是要海投,你这才几十份算不了啥。去年投了一两百份的大有人在。多去跑跑线下招聘吧,有机会继续搞份实习,后面转正机会大些。有条件就多往北上广深投吧。武汉竞争还是太激烈了。
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务