给定一个大小为 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));
     }
 }