每日一道算法题040 多数元素

229 阅读1分钟

题目

leetCode 第 169 题,多数元素
关联类型:数组

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

示例 1:
输入:[3,2,3]
输出:3

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

进阶:
尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

做题时间

class Solution {
    public int majorityElement(int[] nums) {
       
       

    }
}

以上给出方法输入参数,完成作答。

题目分析

摩尔投票法:

核心就是对拼消耗。

玩一个诸侯争霸的游戏,假设你方人口超过总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。

从第一个数开始count=0,遇到相同的就加1,遇到不同的就减1,减到0就重新换个数开始计数,总能找到最多的那个

解答分析

本文只分析本人做题思路,仅供参考,了解一种解题思想,其他各种做题思路请上网查阅。

解答成功:
执行耗时:1 ms,击败了100.00% 的Java用户
内存消耗:41.9 MB,击败了48.03% 的Java用户

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

    }
}