摩尔投票算法

2020-09-27

leetcode 169. 多数元素(majority element)

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例1

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

示例2

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

一些常用解法:

  1. 遍历每一个元素,并计数
  2. 排序,找到位置为 n/2 处的元素

摩尔投票法的基本思想很简单,在每一轮投票过程中,从数组中找出一对不同的元素,将其从数组中删除。这样不断的删除直到无法再进行投票,如果数组为空,则没有任何元素出现的次数超过该数组长度的一半。如果只存在一种元素,那么这个元素则可能为目标元素。

public class Main {

    public int majorityElement(int[] nums) {
        int count = 1;
        int maj = nums[0];
        for (int i = 1; i < nums.length; i++) {
            if (maj == nums[i]) {
                count++;
            } else {
                count--;
                maj = count == 0 ? nums[i + 1] : maj;
            }
        }
        return maj;
    }

    public static void main(String[] args) {
        Main m = new Main();
        int[] ary1 = {3,2,3};
        int[] ary2 = {2,2,1,1,1,2,2};
        int[] ary3 = {3, 3, 4};
        int m1 = m.majorityElement(ary1);
        int m2 = m.majorityElement(ary2);
        int m3 = m.majorityElement(ary3);
        System.out.println(m1);
        System.out.println(m2);
        System.out.println(m3);
    }
}
LeetCode

Jeff Liu

@Scheduled(cron = "") 表达式

常见排序算法总结