首页 > 其他分享 >摩尔投票法

摩尔投票法

时间:2024-10-11 23:01:29浏览次数:4  
标签:count candidate nums 摩尔 current num 投票 数组

摩尔投票法

摩尔投票法用于求取数组中出现超过一半的数字。

空间复杂度: O(1)

时间复杂度: O(n)

摩尔投票算法的基本思想很简单,它通过消除不同元素之间的对抗来找到可能的多数元素。算法遍历数组并维护两个变量:候选元素(candidate)和其对应的票数(count)。开始时,候选元素为空,票数为0。然后对于数组中的每个元素(current_num),执行以下步骤

  1. 如果当前数current_num == count ,则将该数设为candidate,同时count++;
  2. 2.如果candidate == current_num, 则count++;反之,则count--
  3. 3.当count减到0时,candidate再更新数据

如果数组中存在一个数出现次数大于数组长度的1/2,则最后的candidate一定为该数.


int findMajorityElement(vector<int> nums)
{
	int candidate, count = 0;
    for(const auto& current_num : nums){
        if(count == 0){
            candidate = current_num;
        }
        if(current_num == candidate){
            ++count;
        }else{
        	--count;   
        }
    }
    
    
    //检查candidate是否是出现次数超过一半的数
    //因为有可能数组中不存在超过一半的数
    int candidate_count = 0;
    for(const auto& n : nums){
        if(n == candidate){
            ++candidate_count;
        }
    }
    
    if(candidate_count > nums.size() / 2){
        return candidate;
    }else{ // 不存在超过一半的数
        return -1;
    }
    
}

标签:count,candidate,nums,摩尔,current,num,投票,数组
From: https://www.cnblogs.com/runtimeerror/p/18459517

相关文章

  • .NET常见的几种项目架构模式,你知道几种?(附带使用情况投票)
    .NET常见的几种项目架构模式,你知道几种?(附带使用情况投票) 思维导航前言三层架构MVC架构DDD分层架构整洁架构CQRS架构最后总结参考文章DotNetGuide技术社区前言项目架构模式在软件开发中扮演着至关重要的角色,它们为开发者提供了一套组织和管理代码的指导原则,以......
  • CA/B论坛发起投票,弃用基于WHOIS的域名验证方法
    近期,安全研究人员发现,过时的WHOIS服务器存在严重安全*洞,可能被用于伪造TLS/SSL证书,威胁互联网安全。这一发现促使CA/B论坛发起投票,考虑弃用基于WHOIS登记邮箱的域名控制验证(DCV)方法,以提高互联网的整体安全性。什么是WHOIS协议WHOIS协议起源于20世纪80年代早期,用于查询域名和IP地址......
  • 投票算法 Boyer-Moore
    投票算法Boyer-Moore算法描述Boyer-Moore投票算法是一种用来在线性时间内找到数组中出现次数超过一半(即多数元素)的算法。这个算法非常高效,因为它只需要一次遍历数组,并且使用常数级别的额外空间。leetcode169题:多数元素算法思路维护一个候选元素和一个计数器来实现投票算......
  • [leetcode刷题]面试经典150题之5多数元素元素(简单)【附Boyer-Moore 投票算法(摩尔投票法
    很有意思的一个题,想了半天没想出来,最后发现两行代码就做出来了。写完后学习到还可以用Boyer-Moore投票算法,能减小空间复杂度,我把它写在后面,可以进一步学习。题目  多数元素给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊......
  • 计算机毕业设计选题推荐-在线投票系统-Java/Python项目实战
    ✨作者主页:IT研究室✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......
  • MVC项目实战-基于JSP的MVC设计模式实现投票系统
    前言本博客将介绍基于JSP的MVC设计模式实现投票系统,实现两个功能:功能一:投票功能二:查看投票结果 第一步:设计数据库,创建JavaWeb项目,配置pom.xml文件,创建实体类数据库: 数据库中的t_vote包含三个字段:id,v_name,v_numid:主键,一行数据的唯一标识v_name:参与投票的对象名......
  • 7种提示词应用技巧:细节法、分解法、投票法、示例法、角色法、反思法、记忆法
    找到好的prompt是个持续迭代的过程,需要不断调优。善于使用方法,才能事半功倍。细节法:就像你做饭时,要记得放多少盐、多少水一样,细节法就是让我们在解决问题时,注意到每一个小步骤和小事情,这样我们就不会漏掉重要的信息。分解法:这个方法就像把一个大苹果切成小块,这样吃的时候更容易......
  • Boyer-Moore 投票算法:高效发现多数元素的艺术
    Boyer-Moore投票算法:高效发现多数元素的艺术Boyer-Moore投票算法,一种在数据科学领域中备受推崇的算法,以其寻找数组中“多数元素”的高效能力而闻名。所谓“多数元素”,是指在给定数组中出现次数超过一半的元素。这种算法由RobertS.Boyer和JStrotherMoore两位杰出......
  • 浅谈摩尔投票法
    问题引入给定\(n\)个数\(a_i\),求出该数列的绝对众数,保证该绝对众数存在。\(n\le10^7\),空间限制1MB。算法介绍摩尔投票法可以\(O(1)\)空间\(O(n)\)时间内求出一个数列的绝对众数,使用前提是数列保证存在绝对众数,否则你只能求出一个可能是绝对众数的数,这时你还需要使用......
  • springboot投票管理系统-计算机毕业设计源码33128
    摘 要本文介绍了基于微信小程序和SpringBoot的投票管理系统的设计与实现。该系统结合了移动互联网技术和后端开发框架,旨在为各类组织或活动提供一个高效、便捷、用户友好的在线投票平台。系统采用微信小程序作为前端展示与交互界面,用户无需下载安装即可通过微信快速访问......