给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
示例 1:
输入:[3,2,3]
输出:[3]
示例 2:
输入:nums = [1]
输出:[1]
示例 3:
输入:[1,1,1,3,3,2,2,2]
输出:[1,2]
提示:
1 <= nums.length <= 5 *
1
0
4
10^4
104
−
1
0
9
-10^9
−109 <= nums[i] <=
1
0
9
10^9
109
思路:首先还是得读懂题目的意思,给定一个长度为 n 的整数数组,找出里面出现次数超过 n/3 次的元素,意思就是元素个数 大于 长度除以3 取整 的个数。
简单分析下例子
eg1: n = 3 , n / 3 = 1 ; 表示出现次数大于 1 的元素,就是最少得出现两次或者以上 只有元素 3 。
public List<Integer> majorityElement(int[] nums) {
// 用于输出满足条件的list
List<Integer> element = new ArrayList<>();
// 通过map的特性,用来存储 <元素,个数>
Map<Integer, Integer> map = new HashMap<>();
// 需要超过的次数
int time = nums.length / 3;
//判断 出现过多少次
for (int num : nums) {
if (map.containsKey(num)) { //有 +1次
int value = map.get(num) + 1;
map.put(num, value);
} else { //无 新增 1 次
map.put(num, 1);
}
}
//遍历 map中,value 大于 time 的key,存到list里面
for (int key : map.keySet()) {
if (map.get(key) > time) {
element.add(key);
}
}
return element;
}```