剑指offer 28.数组中出现次数超过一半的数字

Posted blogxjc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer 28.数组中出现次数超过一半的数字相关的知识,希望对你有一定的参考价值。

剑指offer 28.数组中出现次数超过一半的数字

题目

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

思路

这有多种方法,我最后选择了图,思路清晰。
首先把数组放进一个hashmap当中,value值做出现次数。然后拿迭代器一对一对取出来,若数量大于总长度一半就输出值,不然就下一个。

代码

  public int MoreThanHalfNum_Solution(int[] array) {
    if (array == null || array.length == 0) {
      return 0;
    }
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < array.length; i++) {
      if (map.containsKey(array[i])) {
        int count = map.get(array[i]);
        map.put(array[i], ++count);
      } else {
        map.put(array[i], 1);
      }
    }

    Iterator iter = map.entrySet().iterator();
    while (iter.hasNext()) {
      Map.Entry<Integer, Integer> entry = (Entry<Integer, Integer>) iter.next();
      if (entry.getValue() > array.length / 2) {
        return entry.getKey();
      }
    }
    return 0;
  }

以上是关于剑指offer 28.数组中出现次数超过一半的数字的主要内容,如果未能解决你的问题,请参考以下文章

[剑指offer] 28. 数组中出现次数超过一半的数字

剑指Offer28数组中出现次数超过一半的数字

剑指Offer 28. 数组中出现次数超过一半的数字 (数组)

剑指offer(28)

剑指Offer:数组中出现次数超过一半的数字39

python剑指offer数组中出现次数超过一半的数字