数组篇 (简单)十二
169.求众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
这题看似简单,可玩性确极高,官方题解给出了足足六种题解,原因就在于本题众数的定义很特别,给出的数组也很特别,众数出现的次数比其他所有数字出现的次数之和还多!
第一种:暴力破解 这也是我唯一能想出的题解,可惜复杂度太高,没办法AC,这题就得用巧劲
class Solution {
public int majorityElement(int[] nums) {
int h=nums.length,count=0,max=0,most=0;
for(int i=0;i<h;i++)
{
for(int j=i;j<h;j++)
{
if(nums[i]==nums[j])
count++;
}
if(count>max)
{
max=count;
most=i;
}
count=0;
}
return nums[most];
}
}
第二种:排序法 这个方法很妙,完美契合本题。排序后,取中间的数即为众数。原因何在?因为众数的数目比数组的一半还多
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[nums.length/2];
}
}
第三种: 随机数法