LeetCode 第169题 求众数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
1 class Solution169 {
2
3 /*
4 思路1: hashmap记录每个元素出现次数
5 */
6 public int majorityElement(int[] nums) {
7 Map<Integer, Integer> map = new HashMap<>();
8 int res = 0;
9 int count = 0;
10 for (int num : nums) {
11 Integer value = map.get(num);
12 if (value == null) {
13 map.put(num, 1);
14 value = 1;
15 } else {
16 map.put(num, ++value);
17 }
18 if (value > count) {
19 count = value;
20 res = num;
21 }
22 }
23 return res;
24 }
25
26 /*
27 思路2: 摩尔投票法
28 */
29 public int majorityElement_2(int[] nums) {
30 int res = nums[0];
31 int count = 1;
32 for (int i = 1; i < nums.length; i++) {
33 if (count == 0) {
34 res = nums[i];
35 ++count;
36 } else {
37 count = nums[i] == res ? ++count : --count;
38 }
39 }
40 return res;
41 }
42
43 /*
44 思路3: 排序,因为众数超过了一半,可以直接返回中间元素
45 */
46 public int majorityElement_3(int[] nums) {
47 Arrays.sort(nums);
48 return nums[nums.length >> 1];
49 }
50 }