给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
排序之后遍历一次即可
import java.util.Arrays;
public class Solutino169 {
public static int majorityElement(int[] nums) {
int n = nums.length;
int i,sum=1;
Arrays.sort(nums, 0, nums.length);
for(i=0;i<n-1;i++)
{
if(nums[i]==nums[i+1])
{
sum++;
if(sum>n/2)
{
return nums[i];
}
}
else
{
sum = 1;
}
}
return nums[0];
}
public static void main(String[] args)
{
//int[] nums = {3,2,3};
int[] nums = {2,2,1,1,1,2,2};
System.out.println(majorityElement(nums));
}
}
针对上面的代码,可以有一个改进,不论众数是数组中的最大,最小值,或者是中间值
因为他的数量大于总数的一半,因此排序完成后的n/2位置处一定是众数
import java.util.Arrays;
public class Solutino169 {
public static int majorityElement(int[] nums) {
Arrays.sort(nums, 0, nums.length); //两行代码即可完成
return nums[nums.length/2];
}
public static void main(String[] args)
{
//int[] nums = {3,2,3};
int[] nums = {2,2,1,1,1,2,2};
System.out.println(majorityElement(nums));
}
}