题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
解题思路 HashMap 存储数字及出现次数,HashMap遍历
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
HashMap <Integer, Integer> map = new HashMap < > ();
for (int i=0;i<array.length;i++){
Integer key =array[i];
Integer nun= map.get(key);
if (nun== null)
map.put(key,1);
else{
nun++;
map.put(key,nun);
}
}
//遍历HashMap遍历方式1,遍历key的集合,通过key得到相应的nun的值
Set <Integer> setkey = map.keySet();
// for (Integer i=0;i< setkey.size();i++){
// int keynun= map.get(setkey[i]);
for(Integer kk:setkey){
Integer keynun= map.get(kk);
int k=kk;
if(keynun>array.length/2){
//System.out.println(2);
return k;
}
}
//System.out.println(0);
return 0;
}
}
HashMap的两种遍历方法
1、遍历得到所有键的集合——keySet();遍历键的集合,得到每一个键,用增强for实现;得到键对应的值——get();
2、获取所有键值对对象的集合
Set < map.Entry< KV,>> entrySet
用增强for实现遍历,得到每一个键值对对象map.Entry
根据键值对获取键和值
getKey() getValue()