给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。
示例 1:
输入: [3,2,3]
输出: [3]
示例 2:
输入: [1,1,1,3,3,2,2,2]
输出: [1,2]
class Solution {
public List<Integer> majorityElement(int[] nums) {
int len = nums.length;
List<Integer> list = new ArrayList<>();
if(len<1) {
return list;
}
Map<Integer,Integer> map = new HashMap<>();
Integer size = 0;
for(int i = 0; i < len; i++){
size = map.get(nums[i]);
if(size==null){
map.put(nums[i],1);
}else{
map.put(nums[i],size+1);
}
}
int flag = len/3;
Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, Integer> entry = it.next();
if(entry.getValue()> flag){
list.add(entry.getKey());
}
}
return list;
}
}