题解 | #数组中出现次数超过一半的数字#
数组中出现次数超过一半的数字
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; } }