首页 > 编程语言 >程序员面试金典 17.18 -- 摩尔投票法

程序员面试金典 17.18 -- 摩尔投票法

时间:2023-01-12 17:33:36浏览次数:65  
标签:count candidate nums -- 金典 元素 17.18 候选人

题目描述

主要元素

思路

这种找“数组中出现次数超过一半的元素”的题目的算法是固定的 -- 摩尔投票法
如果存在这么一个数,他的出现次数超过数组大小的一半,也就是说,他出现的次数之和大于其他元素的出现次数之和
那么将这个数和其他数两两抵消之后,最后剩余的数的集合一定是它本身。
算法思路:
设置一个候选人(数组中出现次数超过一半的元素)
遍历数组中的元素

  1. 如果此时候选人的集合大小为\(0\),那么说明此时没有候选人,所以当前元素就可以担任候选人
  2. 如果当前元素等于候选人,候选人集合大小加一,否则减一
for(auto &x : nums) {
            if(count == 0)  candidate = x;
            if(x ==candidate)   count ++ ;
            else    count -- ;
        }

另外需要注意,如果数组中不存在这个数,那么最终的结果是随机的。还有就是摩尔投票法不能寻找众数!!!

代码

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        // 先用摩尔投票法选出出现次数最多的数,在判断这个数是否合法
        int candidate = -1, count = 0;
        int n = nums.size();
        for(auto &x : nums) {
            if(count == 0)  candidate = x;
            if(x == candidate)  count ++ ;
            else    count -- ;
        }
        cout << "res: " << candidate << endl;
        count = 0;
        for(auto &x : nums) {
            if(x == candidate)  count ++ ;
        }
        return count > n / 2 ? candidate : -1;
    }
};

标签:count,candidate,nums,--,金典,元素,17.18,候选人
From: https://www.cnblogs.com/ALaterStart/p/17047315.html

相关文章

  • linux搭建web服务
    ​​​​1、检查环境getenforce                         #查看seLinux运行状态Enforcing                         ......
  • vue data为什么是函数
    vuedata是函数的原因:1、防止data复用;2、data独立性;3、作用域;4、js的特性。总结来说,如果data是一个函数的话,这样每复用一次组件,就会返回一份新的data(类似于给每个组......
  • 洁净工程洁净厂房设计标准
    洁净工程洁净厂房设计标准要使洁净厂房满足生产工艺要求,必须合理确定相应设计标准。洁净度,洁净度是洁净环境中空气含悬浮粒子量的多少程度。依据国家标准洁......
  • kafka监听全流程相关代码--从获取到数据到存储(彩民画像功能)
    先建一个PortraitTask1@Component2@Slf4j3publicclassPortraitTaskimplementsStatAble{45privatestaticfinalStringLOCK_ID="sss:portra......
  • 揭开 TLS 握手的神秘面纱:它是什么以及它是如何工作的
    传输层安全性(TLS)旨在为网络通信增加安全性。就是浏览互联网时HTTP和HTTPS的区别。使用TLS为客户端和服务器增加了额外的工作,但它有其好处,包括:机密性:TLS将流量包装......
  • 如何在powershell中处理wmi查询返回的时间
    如何将wmi中返回的时间转化成可识别时间wmi中获取的时间类似于这种20230112005430.373878-000 以下代码用户返回操作系统安装时间用来做实验(gwmi-Query"SELECT*FROM......
  • 性能测试|JMeter压测结果分析
    查看结果树对​​https://ceshiren.com/t/topic/1369.json​​发起请求1、增加线程组、HTTPRequest、添加结果树,配置协议、域名、请求地址,如下图所示:请求结果如下图所示:......
  • 恒创科技:国内免备案服务器怎么选比较好?
    ​一般购买国内服务器是需要经过7-20天左右的备案时间,但有的人为了节省时间会直接租用国内的免备案服务器,也就是说不用备案的国内服务器,目前国内不需要备案的服务器仅有......
  • MyBatis(国税)
    一、MyBatis概要1.1、ORM介绍对象关系映射(ObjectRelationalMapping,简称ORM,或O/RM,或O/Rmapping),用于实现面向对象编程语言里不同类型系统的数据之间的转换。它是创建了一个......
  • JRTPLIB RTP头和扩展头代码解析
    RTP文档规范文档查阅网址​​​https://www.rfc-editor.org/rfc/rfc3550​​​​​​​https://www.rfc-editor.org/rfc/rfc5285​​对比说明   在RFC3550头扩展包含......