当前位置: 首页 > news >正文

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

题目描述

主要元素

思路

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

  1. 如果此时候选人的集合大小为 0 0 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;
    }
};

相关文章:

  • MySQL 高效 SQL 使用技巧详解
  • 6. 王道_网络协议
  • 利用Linux的SPI子系统和SPI总线写出SPI设备(DAC模块)的驱动
  • 精确截图工具:基于 Tkinter 和 PyAutoGUI 的实现
  • Docker实现MySQL主从复制配置【简易版】
  • linux 部署Jumpserver(堡垒机)
  • 音视频(二)ffmpeg编译及推流
  • yum repolist all全部禁用了 怎么办
  • 【Ragflow】6. Ragflow-plus重磅更新:增加用户后台管理系统
  • IIC协议以及STM32IIC的特性和架构
  • Redis-05.Redis常用命令-哈希操作命令
  • 流影---开源网络流量分析平台(三)(管理引擎部署)
  • Redis:事务
  • 2025前端八股文终极指南:从高频考点到降维打击的面试突围战
  • Nginx — Nginx版本升级
  • 美甲预约管理系统基于Spring Boot SSM
  • 如何高效解决 Java 内存泄漏问题方法论
  • (学习总结31)Linux 进程地址空间与进程控制
  • 电子电气架构 --- EEA演进与芯片架构转移
  • vue前端代码作业——待办事项
  • 太原网站推广/网络推广公司十大排名
  • 网站建设注意细节问题/什么平台推广效果最好
  • 怎么做网址导航网站/收录优美图片
  • 建设一个网站多少钱呢/互动营销案例100
  • 阿里云网站建设部署与发布视频/友情链接的网站
  • 划分切片来做网站/网络营销的主要手段