刷题笔记-169. 多数元素

64 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

一、题目描述:

169. 多数元素 - 力扣(LeetCode) (leetcode-cn.com)

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

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

示例 1:

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

示例 2:

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

 

进阶:

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

二、思路分析:

选取数组第一个元素作为结果元素,计数count初始化为1,遍历数组,遇到和结果元素相同的元素则count++,遇到和结果元素不同的元素则count--,直到count == 0则说明当前元素已经被我们消耗完了,该换一个元素了,这时使用数组的下一个元素作为新的结果元素,count重新初始化为1,重复上述操作,直到到达数组末尾。最后的结果元素即为所求(因为结果元素的数量大于所有元素的一半,肯定无法被完全消耗)。

三、AC 代码:

    public  int majorityElement(int[] nums) {
        int count = 1;//初始化为1
        int re = nums[0];
        for (int i = 1; i < nums.length; i++) {
            if (count == 0 ){//如果被消耗完毕
                re = nums[i];//选取下一个元素(在这里就是num[i])作为结果元素,count重新赋值
                count = 1;
                continue;//直接进入下一个
            }
            int te = nums[i];
            if (te == re){//进行结果元素和当前元素的判断
                 count++;
            }else {
                count--;
            }
        }
        return re;//即为结果
    }

四、总结:

首先得到元素个数的字典,然后转化为Tuple排降序,输出新列表的首元素(tuple类型)的首元素 - 多数元素 - 力扣(LeetCode)

排序后取数组最中间的值即为结果 - 多数元素 - 力扣(LeetCode)