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

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

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;
    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
2024-12-29 00:19
快手 Java工程师 26.0k*16.0
点赞 评论 收藏
分享
2024-12-21 01:36
电子科技大学 Java
牛客850385388号:员工福利查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务