📋 前言
🌈 个人主页:Sarapines Programmer
🔥 系列专栏:本期文章收录在《C语言闯关笔记》,大家有兴趣可以浏览和关注,后面将会有更多精彩内容!
⏰翰墨致赠:翱翔苍穹气如虹,剑指星辰誓豪雄。 梦中豪迈情何限,桀骜风云驭豹踪。
🎉欢迎大家关注🔍点赞👍收藏⭐️留言📝 🔔作者留言:
欢迎来到编程要点!这是一个揭示编程精髓的地方。在这里,我分享基础原则、高效技巧,以及实际项目中的宝贵经验。无论你经验如何,这里都将为你呈现编程的精妙之处。准备好了吗?让我们一同创造属于我们的编程奇迹吧!
目录
📋 前言
🕵️♀️1. 摩尔投票算法:求解多数元素
🔍1.1 问题描述:多数元素
🔍1.2 摩尔投票算法
🎉解决代码
🕵️♀️1. 摩尔投票算法:求解多数元素
🔍1.1 问题描述:多数元素
给定一个大小为 n 的数组 nums ,返回其中的多数元素【多数元素是指在数组中出现次数 大于一半及以上的元素】
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:nums = [3,2,3]
输出:3
示例 2:
输入:nums = [2,2,1,1,1,2,2]
输出:2
代码模板:
class Solution {
public:
int majorityElement(vector
}
};
🔍1.2 摩尔投票算法
摩尔投票算法是一种用于寻找数组中出现次数超过一半的主要元素的高效算法。该算法的核心思想是通过不同元素之间的相互抵消来找到可能的主要元素。
时间复杂度为 O(n),空间复杂度为 O(1)。
摩尔投票算法的详细步骤:
初始化候选元素和计数器: 选择数组的第一个元素作为候选元素,初始计数器为1。
遍历数组: 从数组的第二个元素开始遍历,对于每个元素执行以下操作:
如果当前元素与候选元素相同,将计数器加1。如果当前元素与候选元素不同,将计数器减1。
如果计数器减到0,说明之前的候选元素的出现次数与当前元素的出现次数相抵消,因此选择当前元素作为新的候选元素,并将计数器重新设为1。
摩尔投票算法的关键在于,由于主要元素的出现次数超过一半【前提条件】,其余元素的出现次数总是无法抵消主要元素的出现次数,因此最终剩下的候选元素即为主要元素。
🎉解决代码
class Solution {
public:
int majorityElement(vector
int num=nums[0],count=0;
for(int i=0;i if(i==0 ||num==nums[i]){ count++; } else{ if(count==0){ num=nums[i]; count=1; } else count--; } } return num; } }; 参考视频:【摩尔投票法】