力扣专题——169. 多数元素

Posted super尚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣专题——169. 多数元素相关的知识,希望对你有一定的参考价值。

题目:

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

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

示例 1:

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

示例 2:

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

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

解题思路

投票法:根据题意可知。数组中众数的数量是大于其他数据之和的数量。所以众数的票数是一定大于其他所有票数之和。
具体实现就在每一个投票的数据中进行加减,当票数变为0的时候,酒吧当前的候选人设为下一个,继续进行投票,这样最后剩下的一定是众数。

代码

int majorityElement(int* nums, int numsSize){
    int res=0;
    int flag=nums[0];
    for(int i=0;i<numsSize-1;i++){
        if(nums[i]==flag){
            res++;
        }else{
            res--;
            if(res==0){
                flag=nums[i+1];   
            }
        }
    }
    return flag;
}

以上是关于力扣专题——169. 多数元素的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode169. 多数元素(摩尔投票法)

[E摩尔投票] lc169. 多数元素(多数投票算法+经典)

LeetCode(算法)- 169. 多数元素

LeetCode(算法)- 169. 多数元素

[编程题] lc [169. 多数元素-双指针和哈希表方法]

LeetCode 169. 多数元素c++/java详细题解