【简单】面试题 17.10. 主要元素(摩尔投票法/多数投票法)

算法专题:投票法 这两个问题之间的主要区别在于正在寻找的元素的数量。在查找主要元素的问题中,出现次数超过了n/2的只可能有一个元素。在这种情况下,当count变为0时可以安全地开始考虑一个新的候选元素,因为不可能有两个元素都出现次数超过n/2。所以当count为0时,可以肯定之前的元素不可能是主要元素,所以重新设置一个候选主要元素是合理的。然而,当寻找的是出现次数超过n/3的元素时,一个数组有可能存在两个这样的元素。所以,不能直接在count为0时就更改候选元素,必须先判断新元素是不是==num1/==num2! 阅读详情

【题目】
数组中占比超过一半的元素称之为主要元素,给定一个整数数组,找到它的主要元素,若没有,返回-1。
来源:leetcode
链接:https://leetcode-cn.com/problems/find-majority-element-lcci/
【示例】
输入:[1,2,5,9,5,9,5,5,5]
输出:5
【示例2】
输入:[3,2]
输出:-1
【示例3】
输入:[2,2,1,1,1,2,2]
输出:2
【代码】常规法

class Solution {
public:
    map<int,int> m;
    int majorityElement(vector<int>& nums) {
        int len=nums.size()/2+1;
        for(auto x:nums){
            m[x]++;
            if(m[x]>=len)
                return x;
        }
        return -1;
    }
};

【摩尔投票法(多数投票法)】用于解决在无序多个候选人中选择票数最多的那个。cnt用来记录major主要元素的票数,当cnt为0票的时候,表示候选人为空,使major等于新元素,当cnt非0时,若新元素和major相同则使cnt++,否则,cnt–
例如数组[1,1,2,3,1]
step1:新元素:1;cnt=1 major=1
step2:新元素:1;cnt++ cnt=2 major=1
step3:新元素:2;cnt-- cnt=1 major=1
step4:新元素:3;cnt-- cnt=0 major=1
step5:新元素:1;cnt++ cnt=1 major=1

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int major=nums[0],cnt=1,len=nums.size();
        for(int i=1;i<len;i++)
            if(!cnt||major==nums[i]){
                major=nums[i];
                cnt++;
            }else
                cnt--;        
        int n=0;
        for(auto x:nums)
            if(x==major)
                n++;
        return n>=len/2+1?major:-1;
    }
};
SOC设计必看!Tessent DRC检查中最容易踩的5个坑(附解决方案) 本文针对SOC设计中Tessent DRC检查的常见问题,详细分析了5个最易忽视的陷阱,包括时钟域交叉、扫描链虚连、多电压域规则等,并提供专业解决方案。特别针对芯片设计中的DFT验证难点,分享了经过验证的调试方法和Tessent工具使用技巧,帮助工程师提升DRC检查效率。 阅读详情

相关推荐

手把手教你用TI MOSFET搭建0-100mA恒流源电路(附避坑指南)

本文详细介绍了如何使用TI MOSFET SI1204D搭建0-100mA恒流源电路,包括基础原理、电路设计、PCB布局和热管理技巧。通过分步指导和避坑指南,帮助工程师实现高精度、低成本的电流控制方案,适用于LED驱动、传感器激励等多种应用场景。

weixin_29310631的博客 486

力扣每日一题21.07.09

面试题 17.10.主要元素 题目描述: 数组中占比超过一半的元素称之为主要元素。给你一个整数数组,找出其中的主要元素。若没有,返回-1。请设计时间复杂度为O(N)、空间复杂度为O(1)的解决方案。 示例1: 输入:[1, 2, 5, 9, 5, 9, 5,5, 5] 输出:5 示例2: 输入:[3, 2] 输出:-1 示例3: 输入:[2, 2, 1, 1, 1, 2, 2] 输出:2 思路:哈希表、摩尔投票 1、哈希表:(时间复杂度O(N),空间复杂度O(N),不合题意) .

wcy1034036507的博客 171

性能测试软件(LR12) 具体汉化(中文)方法

LoadRunner 12 的下载及安装详细过程请参考:https://blog.csdn.net/xiao66guo/article/details/105465854 1、在LoadRunner文件中找到 Setup.exe 可执行文件,并以管理员的身份运行: C盘 —> Temp—>HP LoadRunner 12.02 Community Edition—> D...

多谢大人光临寒舍,请随便看看,喝口茶吧 ☕️☕️☕️ 1993

数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1

数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。 示例 1: 输入:[1,2,5,9,5,9,5,5,5] 输出:5 示例 2: 输入:[3,2] 输出:-1 示例 3: 输入:[2,2,1,1,1,2,2] 输出:2 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-majority-element-lcci 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 package c

王天泽的博客 1086

3个PLC进阶教程实战项目,学完立即接私单!

此处应插入清晰的硬件电路图,包含土壤湿度传感器、水泵、PLC的输入输出端子,并标注清晰的接线方式。同样的,也需要插入清晰的梯形图,用简单的逻辑表达控制过程,比如:土壤湿度传感器信号低于设定值 -> PLC输出信号 -> 水泵启动。我是老王,一个在自动化行业摸爬滚打多年的老工程师,今天咱们不聊那些枯燥的理论,直接上手三个PLC进阶实战项目,学完保证你信心满满,立马就能接私单!想想你家里的空调,它也是通过检测室温,并根据设定的温度进行制冷或制热,这个项目就是类似的原理。

qq_38220914的博客 1476

用SOLIDWORKS从零画一个履带机器人,手把手教你搞定底盘和传动

本文详细介绍了如何使用SOLIDWORKS从零开始设计履带式机器人,重点讲解底盘结构优化和传动系统设计的关键步骤。通过七个阶段的实战指南,包括前期规划、底盘建模、驱动系统装配、履带生成、动态模拟等,帮助工程师和爱好者掌握履带机器人的核心设计技巧,提升地形适应能力和动力效率。

weixin_30872499的博客 632

力扣题——主要元素

题目描述:数组中占比超过一半的元素称为主要元素,现在给你一个整数数组,找出数组中的主要元素,若没有则返回-1 思路:删除数组中相邻的两个不同的数 假设有一个数组arr,arr中的元素为[3,3,3,1,4],arr中3是主要元素,因为3的占比超过了一半,所以即使是最坏的情况(剩下的元素和3一起被删除),最后剩下来的依旧是3 但剩下来的数不一定是主要元素,假设arr中所有的元素都只出现过一次,那么剩下来的数便不是主要元素 所以需要再遍历一次数组,统计剩下的元素在数组中出现的个数,如果出现的..

qq_52989768的博客 695

LT码与Raptor码的性能仿真

从数据分析看来,在数据块大小较小时(100 - 200 左右 ),LT 码和 Raptor 码的平均冗余符号数量差距相对较小,但 LT 码的冗余符号数量始终高于 Raptor 码。现在采用MATLAB进行仿真,直观展示不同数据块大小下,两种解码方式的解码时间差异.如图4.1所示,LT解码(绿色圆点折线)LT 解码方式的解码时间随数据块大小的变化情况。从实际应用的角度来看,LT码由于其简单的编码机制,适用于资源受限或对编码效率要求较高的场景,但其较高的解码复杂度限制了其在一些实时性要求较高的应用中的使用。

道亦无名 1138

每日一题:主要元素(简单)

数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。 示例 1: 输入:[1,2,5,9,5,9,5,5,5] 输出:5 示例 2: 输入:[3,2] 输出:-1 示例 3: 输入:[2,2,1,1,1,2,2] 输出:2 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-majority-element-lcc

weixin_47109266的博客 262

CentOS7安装OpenSSL1.1.1s

CentOS7安装OpenSSL1.1.1s

Bertram的博客 733

Qt C++ HTTP 调用通义千问大模型 X 学术论文润色工具(SCI 格式适配)

请求地址:`https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation`;| Windows | 打包时携带 `Qt6Network.dll`/`libcrypto-1_1-x64.dll` 等依赖;| Linux | 安装 `libssl-dev` 和 `libcurl4-openssl-dev`;| API 调用失败 | 检查 API-KEY 是否有效;

寒寒豆豆软件公司的博客 104

数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。

classSolution{ publicintmajorityElement(int[]nums){ intresult=-1; Map<Integer,Integer>maps=newHashMap<Integer,Integer>(); for(intkey:nums){ if(maps.containsKey(key)){ ...

u012605082的博客 655

Android 自动亮度

/则需要从BrightnessConfigure类中读取两个数组源:config_autoBrightnessLevels和config_autoBrightnessDisplayValuesNits。) 或知道其在DisplayPowerController()构造的时候初始化的。曲线设置好了,就应该扔代码里跑起来,模型建起来了,这个过程是咋样的呢?//它将负责曲线的创建,自动背光值的计算等。通过搜索配置关键词(

Android 1487

【算法】摩尔投票法 找 多数元素

https://leetcode.cn/problems/majority-element/ 维护一个众数 ans 和它出现的次数 cnt。 初始时 ans 为任意值,cnt 为 0。枚举数组中的每个数: 如果当前 cnt = 0,先将当前数字设置成 ans。 随后判断当前数字 x 与众数 ans 之间的关系,如果相等—— cnt++ ;否则 cnt–; 其它解法 其余解法可见:https://leetcode.cn/problems/majority-element/solutions/146074/du

小威的博客 446

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

你听说过摩尔投票法吗

前言 前几天在刷力扣题目时,看官方题解发现的算法,我感觉这个算法非常有意思,是一个很好的思维开拓,因此我整理摩尔投票算法的一些知识,分享给大家。 摩尔投票法 博耶-摩尔多数投票算法( Boyer–Moore majority vote algorithm ),中文常作多数投票算法、摩尔投票算法等,是一种用来寻找一组元素中占多数元素的常数空间级时间复杂度算法。 算法思想 在集合中寻找可能存在的多数元素,这一元素在输入的序列重复出现并占到了序列元素的一半以上;在第一遍遍历之后应该再进行一个遍历以统计第一次算法遍

战场小包的博客 2311

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

leetcode:面试题 17.10. 主要元素

题目来源 https://leetcode-cn.com/problems/find-majority-element-lcci/ 题目描述 题目解析 目标: 一个数,出现次数大于(length/2) 我第一个反应是使用hash计数法,但是这里没有指定数组元素的范围,所以pass,就看看能不能使用map了 使用map 统计每个数出现的次数,如果大于(length/2),返回 publ...

OceanStar的博客 388

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

使用摩尔投票法解决多数问题

1、什么是摩尔投票法 博耶-摩尔多数投票算法(英语:Boyer–Moore majority vote algorithm),中文常作多数投票算法、摩尔投票算法等,是一种用来寻找一组元素中占多数元素的常数空间级时间复杂度算法。 这一算法应用的问题原型是在集合中寻找可能存在的多数元素,这一元素在输入的序列重复出现并占到了序列元素的一半以上;在第一遍遍历之后应该再进行一个遍历以统计第一次算法遍历的结果出现次数,确定其是否为众数;如果一个序列中没有占到多数的元素,那么第一次的结果就可能是无效的随机元素。对于数据流

秃头哥编程 452

leetcode.面试题 17.10. 主要元素---摩尔投票法

面试题 17.10. 主要元素 数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。 示例 1: 输入:[1,2,5,9,5,9,5,5,5] 输出:5 示例 2: 输入:[3,2] 输出:-1 示例 3: 输入:[2,2,1,1,1,2,2] 输出:2 题解: 由于题目限制了时间和空间的复杂度,因此我们这里只能使用摩尔投票法进行解决,具体摩尔投票法思路可见开学回归力扣:第十一题—

xiangguang_fight的博客 238

摩尔投票法 -leetcode-229. 求众数 II

面试题 17.10. 主要元素 题目描述 数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。 解法选择: 法1:哈希表 法2:摩尔投票法 哈希 使用 map 统计每个元素出现的个数,最终保留出现次数大于 n/2n / 2n/2 的元素,即可。 class Solution { public int majorityElement(int[] nums) {

weixin_56915683的博客 309

高效寻找数组中的众数——摩尔投票法

问题:在长度为n的数组中找出重复次数超过n/2的数(假设一定存在) 摩尔投票法基于这样一个事实,当一个数的重复次数超过数组长度的一半,每次将两个不相同的数删除,最终剩下的就是要找的数。 摩尔投票法的代码实现并不是真的要删除数组里的数,只是把遍历过程当作一个删除过程。 使用一个虚拟数组存放还未和不同数字一起删除的数,这个数组只能有若干个同一数字,不可能存在不同的数,因为如果存在不同的数就会被删去,而不会放到此数组中。 当数组遍历到当前元素时,若虚拟数组为空,就将当前元素加进去;若虚拟数组非空,就比较当前元素是

一枚菜鸡 617

LeetCode 169. 多数元素【摩尔投票法】简单

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。。

memcpy0的博客 209

排序 | 哈希表 | 摩尔投票:力扣169. 多数元素(也就是求众数)

1、题目描述: 2、题目: 可以同时做一下力扣 方法1:排序 因为众数必定存在,所以可以排序后,返回中间值,中间值一定是众数。 Python: class Solution: def majorityElement(self, nums: List[int]) -> int: #排序 nums.sort() return nums[len(nums) // 2] C++: class Solution { public: int maj

weixin_42042056的博客 359

【算法】摩尔投票法

数组处理 摩尔算法 map

alwayszmj 194

摩尔投票法

知乎简介 首先请考虑最基本的摩尔投票问题,找出一组数字序列中出现次数大于总数1/2的数字(并且假设这个数字一定存在)。显然这个数字只可能有一个。摩尔投票算法是基于这个事实:每次从序列里选择两个不相同的数字删除掉(或称为“抵消”),最后剩下一个数字或几个相同的数字,就是出现次数大于总数一半的那个。 形象化描述 想象着这样一个画面:会议大厅站满了投票代表,每个都有一个牌子上面写着自己所选的候选人的名字。然后选举意见不合的(所选的候选人不同)两个人,会打一架,并且会同时击倒对方。显而易见,如果一个人拥有的选

私が悪いのではなく、この世界が悪いのです 179

面试题 17.10. 主要元素

面试题 17.10. 主要元素 题号:力扣面试题 17.10 知识点:数组,计数 目标完成度:24/150 总结 题干: 思路: 1.本题难点在于时间复杂度为O(N),空间复杂度为O(1)的要求。使用摩尔投票法 2.摩尔投票法: class Solution: def majorityElement(self, nums: List[int]) -> int: count = 0 ans = 0 for num in nums:

weixin_44742084的博客 141

LeetCode 229. Majority Element II【摩尔投票法】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章中,我不仅会讲解多种解题思路及其优化,还会用多种编程语言实现题解,涉及到通用解法时更将归纳总结出相应的算法模板。。

memcpy0的博客 280
上一篇: 【简单】面试题 17.04. 消失的数字
下一篇: 【简单】235. 二叉搜索树的最近公共祖先(三种方法实现:后序遍历的非递归法实现+递归+迭代)
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值