LeetCode 热题100-57-多数元素

核心思想:摩尔投票法
思路:
摩尔投票算法是基于这个事实:每次从序列里选择两个不相同的数字删除掉(或称为“抵消”),最后剩下一个数字或几个相同的数字,就是出现次数大于总数一半的那个。
摩尔投票法就是遇到相同的数字则count + 1,遇到不同的数字则count - 1。
且多数元素的个数> ⌊ n/2 ⌋,其余元素的个数总和<= ⌊ n/2 ⌋。
因此多数元素的个数 - 其余元素的个数总和 的结果 肯定 >= 1。
这就相当于每个多数元素和其他元素两两相互抵消,抵消到最后肯定还剩余至少1个多数元素。

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

你可能感兴趣的:(Leetcode热题100,leetcode,java)