力扣专题——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. 多数元素的主要内容,如果未能解决你的问题,请参考以下文章
[E摩尔投票] lc169. 多数元素(多数投票算法+经典)