题目:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
第一种解法:使用map先遍历存储,然后判断map的value最大值获得多数元素。
public int majorityElement(int[] nums) {
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<nums.length;i++){
if(map.containsKey(nums[i])){
map.put(nums[i],map.get(nums[i])+1);
}
else{
map.put(nums[i],1);
}
}
Integer max=Collections.max(map.values());
for(Map.Entry<Integer,Integer> num:map.entrySet()){
if(num.getValue()==max){
return num.getKey();
}
}
return -1;
}
第二种解法:先对数组进行排序,然后中间的数就是多数元素。
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[(0+nums.length)/2];
}
解法2相对于解法1,时间复杂度降低录,但是空间复杂变高了。