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

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

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

方法:哈希表

哈希表是一个按键值对存储的数据结构,其中键key唯一,用其可以找到唯一的值value,访问时间是O(1),一般用于计数统计频率和判断某个元素是否出现过的问题。

本题就是典型的统计频率的问题,通过哈希表记录每个元素出现的次数,当某个元素的出现次数超过一半就返回。

步骤:

1、创建哈希表,key为数组的元素,value为出现的次数。

2、遍历一次数组,每次先判断该数是否出现过,若没出现过就将出现次数设为1,若出现过就将查询到的次数加一存入。

3、判断当前数字出现次数是否大于数组一半的长度,是则返回该数,否则继续步骤2的遍历。

4、若最后遍历完东都没找到,返回0

哈希表的常用方法:

1、mp.set(key,value)存入一个哈希键值对

2、mp.containsKey(key)返回bool值,判断某个key值是否存在

3、mp.get(key)获取key对应的value值

import java.util.*;

public class Solution {

    public int MoreThanHalfNum_Solution (int[] numbers) {
        if(numbers.length==0){
            return 0;
        }
        HashMap<Integer,Integer> mp = new HashMap<Integer,Integer>();
        for(int  i=0;i<numbers.length;++i){
            if(!mp.containsKey(numbers[i])){
                mp.put(numbers[i],1);
            }
            else{
                mp.put(numbers[i],mp.get(numbers[i])+1);
            }
            if(mp.get(numbers[i])>numbers.length/2){
                return numbers[i];
            }
        }
        return 0;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 13:39
点赞 评论 收藏
分享
07-07 12:25
门头沟学院 Java
程序员牛肉:你这个智邮公司做的就是那个乐山市税务系统的服务吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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