题目:
169:给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数;
思路:
-
暴力解法,双层循环统计每个数字出现的次数,大于n/2则返回,时间复杂度n2;
-
改善暴力解法的时间复杂度,使用hash码来快速定位存储数字出现的次数并对其进行+1,一次循环统计所有数字出现的次数,并在其中找到次数最多的数字并返回,时间复杂度n;
-
因为题目说明一定存在众数,所以可以考虑排序,然后组数最中间的数字就是众数,即下标为n/2的那个数字,时间复杂度nlogn;
代码实现:
1,排序:
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[nums.length/2];
}
}