gpt4 book ai didi

java - java 查找数组中每个元素出现的次数

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:24 26 4
gpt4 key购买 nike

所以我想要一个基值,我们称之为n。如果数组中数字的计数等于 n,那么我希望打印出该数字。

我希望这能在 O(n) 时间内完成:

这就是我所拥有的,将值放入 HashMap 中,然后如何检查每个键的计数?:

  int[] a = {1, 2, 3, 4, 5, 6, 7, 7, 7, 7};
int minOfOneNum = a.length/2;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i : a) {
Integer count = map.get(i);
map.put(i, count != null ? count + 1 : 0);
}

编辑:

求最大值

   for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
int count = entry.getValue();
if(count == minOfOneNum){
System.out.println(entry.getKey() + "Is the max");
}
System.out.println(count);
}

最佳答案

您可以使用键集迭代 map 中的计数值:

for(Integer key : map.keySet()) {
int count = map.get(key);
}

请注意,map.put(i, count != null ? count + 1 : 0); 不正确,因为如果 countnull,则必须将 1 放入 map 中。否则,您将不会计算元素的第一次出现。

编辑:或者按照 Andy Turner 的建议,您可以使用条目集:

for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
int count = entry.getValue();
}

编辑2:如果你想找到最大值,你当然可以使用相同的循环:

int max = Integer.MIN_VALUE;
for(Map.Entry<Integer, Integer> entry : map.entrySet()) {
max = Math.max(max, entry.getValue());
}

if(n == max) {
// do something
}

或者使用 Java 8 流更好:

int max = map.values().stream().max(Integer::compare);
if (n == max) {
// do something
}

编辑3:如果您确实对最常出现的数字及其出现的次数感兴趣,您可以执行以下操作:

int max = Integer.MIN_VALUE;
int maxKey = -1;
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if (max < entry.getValue()) {
max = entry.getValue();
maxKey = entry.getKey();
}
}

System.out.println(maxKey + "appears most often: " + max + " times");

或者再次使用 Java 8 流:

Map.Entry<Integer, Integer> max;
max = map.entrySet().stream().max((x, y) -> Integer.compare(x.getValue(), y.getValue())).get();

System.out.println(max.getKey() + "appears most often: " + max.getValue() + " times");

关于java - java 查找数组中每个元素出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35801394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com