题目:剑指 Offer 39. 数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
限制:1 <= 数组长度 <= 50000
链接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof
解题:
class Solution {
// 思路hash表
public static int majorityElement(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
int lengthB = nums.length / 2 + (nums.length % 2 == 0 ? 0 : 1); // 注意,奇数个进位
for (int num : nums) {
Integer v = map.get(num);
if (null == v) {
v = 0;
}
v = v + 1;
if (v >= lengthB) {
return num;
}
map.put(num, v);
}
return -1;
}
}