题目描述
给定一个大小为n
的数组,找到多数元素。大多数元素的元素⌊n / 2⌋
多次出现。
您可以假设数组是非空的,并且大多数元素始终存在于数组中。
解决
- 使用
hashmap
public int majorityElement1(int[] nums) {
if(nums.length == 1)
return nums[0];
Map<Integer,Integer> map = new HashMap<>();
int result = 0;
for(int i=0;i < nums.length;i ++){
if(!map.containsKey(nums[i])){
map.put(nums[i],1);
}else{
if(map.get(nums[i]) > nums.length/2){
result = nums[i];
break;
}else {
map.put(nums[i],map.get(nums[i]) + 1);
}
}
}
return result;
}
- 计数
public int majorityElement(int[] nums) {
if(nums.length == 1)
return nums[0];
int sum = 1;
Arrays.sort(nums);
for(int i = 0;i < nums.length-1;i++){
if(nums[i] == nums[i+1]){
sum ++;
if(sum > nums.length / 2){
return nums[i];
}
}else {
sum = 1;
}
}
return 0;
}