BM51 数组中出现次数超过一半的数字

  算法   2分钟   755浏览   0评论

题目链接:https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163

题目描述

给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。

数据范围:n ≤ 50000,数组中元素的值 0 < val ≤ 10000

要求:空间复杂度:O(1),时间复杂度 O(n)

输入描述

保证数组输入非空,且保证有解

示例 1:

输入:[1,2,3,2,2,2,5,4,2]
返回值:2

示例 2:

输入:[3,3,3,3,2,2,2]
返回值:3

示例 3:

输入:[1]
返回值:1

解题代码

import java.util.*;
public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        //哈希表统计每个数字出现的次数
        HashMap<Integer, Integer> map = new HashMap<>();
        //遍历数组
        for (int j : array) {
            //统计频率
            if (!map.containsKey(j))
                map.put(j, 1);
            else
                map.put(j, map.get(j) + 1);
            //一旦有个数大于长度一半的情况即可返回
            if (map.get(j) > array.length / 2)
                return j;
        }
        return 0;
    }
}

如果你觉得文章对你有帮助,那就请作者喝杯咖啡吧☕
微信
支付宝
  0 条评论