169. 求众数

LeetCode169. Majority Element摩尔投票算法

题目描述
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。

摩尔投票算法
给定一个 int 型数组,找出该数组中出现次数大于数组长度一半的 int 值。

示例 1:

输入: [3,2,3]
输出: 3

示例 2:

输入: [2,2,1,1,1,2,2]
输出: 2

Java 实现

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class Solution {
    // Sorting
    public static int majorityElement1(int[] nums) {
        Arrays.sort(nums);
        return nums[nums.length / 2];
    }

    // Hashtable
    public static int majorityElement2(int[] nums) {
        Map<Integer, Integer> myMap = new HashMap<Integer, Integer>();
        int ret = 0;
        for (int num : nums) {
            if (!myMap.containsKey(num)) {
                myMap.put(num, 1);
            } else {
                myMap.put(num, myMap.get(num) + 1);
            }
            if (myMap.get(num) > nums.length / 2) {
                ret = num;
                break;
            }
        }
        return ret;
    }

    // Moore voting algorithm
    public static int majorityElement3(int[] nums) {
        int count = 0, ret = 0;
        for (int num : nums) {
            if (count == 0) {
                ret = num;
            }
            if (num != ret) {
                count--;
            } else {
                count++;
            }
        }
        return ret;
    }
}

参考资料

相关文章:

  • 2021-06-27
  • 2021-08-24
  • 2021-07-23
  • 2022-01-04
  • 2021-11-23
  • 2021-07-30
  • 2022-12-23
  • 2021-08-06
猜你喜欢
  • 2021-12-04
  • 2021-05-18
  • 2022-01-16
  • 2021-09-25
  • 2021-10-16
  • 2022-12-23
相关资源
相似解决方案