查找数组java

时间:2016-03-04 16:40:38

标签: java arrays

所以我想要一个基本值,让我们称之为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);
        }

1 个答案:

答案 0 :(得分:0)

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

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

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

编辑或者正如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");