我需要一个方法,从Java中的整数数组中返回最常用的数字。如果2个数字是最常见的,我希望该方法返回最高数字。
示例:
[4,1,4,1,3]
- > 4
(不是1
)[5,2,6,5,5]
- > 5
感谢。
答案 0 :(得分:4)
其中一个解决方案是创建Map with Integer作为键,将Integer作为值。您将不得不遍历数组并增加地图中的数字量。
Integer[] arr = {4, 1, 4, 1, 3};
Map<Integer,Integer> integersCount = new HashMap<Integer,Integer>();
for (Integer i : arr){
if (!integersCount.containsKey(i))
integersCount.put(i, 1);
else
integersCount.put(i, integersCount.get(i) + 1);
}
之后,您可以浏览地图并记住具有最大价值的元素的位置。
对于另一个解决方案,我建议计算另一个数组中的数字 - 阅读&#34;计算排序&#34;。
答案 1 :(得分:1)
您可以创建一个hashmap,然后遍历数组,并将数组的每个索引存储数组索引值作为键,然后hashmap值将成为您在数组中看到该键的频率的计数器。一旦运行数组,创建两个变量,一个将跟踪hashmap中的最高值,另一个将跟踪有多少变量。如果只有一个具有最高值,则再次遍历hashmap以找到该值,然后该键将成为答案。如果有多个键具有最高值,则创建一个列表,然后通过hasmap重复并存储其值等于最高值的每个键。然后迭代链表以找到最高值。
有逻辑。如果你需要我写出实际的代码,我可以。只是lmk。
答案 2 :(得分:0)
在统计数据中,此函数称为mode
,自Java 8以来,您可以使用Stream
轻松实现此功能:
List<Integer> list = Arrays.asList(4,1,4,4,3,1);
Integer mostFrequented = list.stream().reduce(BinaryOperator.maxBy((o1, o2) ->
Collections.frequency(list, o1) - Collections.frequency(list, o2))).orElse(null);
System.out.println(mostFrequented); // Prints 4
答案 3 :(得分:0)
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for (Integer integer : array){
if (map.containsKey(integer))
map.put(integer, map.get(integer) + 1);
else
map.put(integer,1);
}
List<Integer> list = new ArrayList<Integer>(map.keySet());
Collections.sort(list,new Comparator<Integer>() {
@Override
public int compareTo(Intger num1, Integer num2) {
if(map.get(num1)>map.get(num2))
return -1;
if(map.get(num1)<map.get(num2))
return 1;
if(num1 > num2)
return -1;
if(num1<num2)
return 1;
return 0;
}
});
System.out.println(list.get(0));
答案 4 :(得分:0)
糟糕的方式但很难理解你和我;)
int arr[] = {5,2,6,5,5};
int repeat[]={0,0,0,0,0};
int index=0;
for(int i:arr){
for(int j:arr){
if(j==i)
repeat[index]++;
}
index++;
}
//print repeat array to find out
for(int i:repeat){
System.out.println(i);
}
自己完成;)