Leetcode169.多数元素——摩尔投票

2023-10-26

文章目录

引入

Leetcode上有如下的题

169.多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 :
输入: [2,2,1,1,1,2,2]
输出: 2

乍一看的时候,直接想用HashMap来做,键是元素,值是元素的count。
这是第一种方法:其时间和空间复杂度都是是O(N)。

第二种方法是通过排序数组,然后取数组的中位数:因为多数元素是超过了半数的,所以中位数=众数,该方法需要排序,如果是使用原地排序,那么时间复杂度是O(NlogN),空间复杂度是O(1)。

第三种方法,就是使用摩尔投票。

摩尔投票

如果我们把众数记为 +1 ,把其他数记为 -1,将它们全部加起来,显然和大于 0 ,从结果本身我们可以看出众数比其他数多。

我们当然并不知道哪个数最开始是众数,所以我们把数组众第一个遇到的数作为众数候选(candidate)。
然后循环遍历,如果用计数器表示这个众数候选比其他数数目多多少。如果计数器变成了0,那么不认为它是众数。取它后一个数作为新的众数。

注意,我们这里所说的众数,其数目超过了一半,如果少于一半,显然不能用方法二和这里的方法三。

class Solution {
    public int majorityElement(int[] nums) {
        int count = 0;//计数器
        Integer candidate = null;

        for (int num : nums) {
            if (count == 0) {
                candidate = num;
            }
            count += (num == candidate) ? 1 : -1;
        }

        return candidate;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode169.多数元素——摩尔投票 的相关文章

  • 地址栏参数隐藏

    1 result type 的redirectAction改为chain 但要注意如果是登录方法 权限拦截器中就可能会影响 2 将参数放到作用域中 比如session 注意 1 这样的注释是没用的
  • 网络编程13——epoll事件模型:ET和LT模、掌握实现epoll的ET模式(非阻塞模式

    epoll是linux下多路复用IO select poll 的增强版本 它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率 因为它会复用文件描述符集合来传递结果为不用迫使开发者每次等待事件之前都必须重新准备要被侦听的文
  • shiro认证机制及认证原理

    转自 shiro认证机制 认证原理 下文笔者将讲述shiro的认证机制及认证原理 如下所示 Shiro认证 验证用户身份的过程 在认证过程中 用户需要提交实体信息 Principals 和凭据信息 Credentials 以检验用户是否合法
  • 【玩转PointPillars】Ubuntu18.04上部署nutonomy/second.pytorch

    系统环境 Ubuntu18 04 cuda10 2 GeForce GTX 1650 今天部署的项目虽然名称上叫做second pytorch 实际上是PointPillars的作者fork自SECOND项目 并作了改动之后形成的Point

随机推荐

  • 词法分析器构造工具Flex基础学习

    Flex是一个生成词法分析器的工具 它可以利用正则表达式来生成匹配相应字符串的C语言代码 其语法格式基本同Lex相同 单词的描述称为模式 Lexical Pattern 模式一般用正规表达式进行精确描述 FLEX通过读取一个有规定格式的文本
  • SVN 服务器发送了意外的返回值(405 Method Not Allowed),在响应 “MKCOL” 的请求

    先转载一段网上说的解决方法 svn 405 Method Not Allowed 在响应 MKCOL 的请求 I managed to solve the problem Delete the parent s directory of t
  • jupyter lab的目录调整及默认浏览器设置为chrome

    Jupyter lab 的目录调整及默认浏览器设置为chrome 1 Jupyter 默认目录调整 首先要找到jupyter生成的配置文件 jupyter notebook config py 如果没有 在 anaconda prompt
  • 在Anaconda中快速安装OpenCV for Python

    一 下载和安装Anaconda Anaconda下载地址 Anaconda Individual EditionAnaconda s open source Individual Edition is the easiest way to
  • 【吐血整理】java程序员推荐轻薄笔记本

    正文 在写这个文章之前 我花了点时间 自己臆想了一个电商系统 基本上算是麻雀虽小五脏俱全 我今天就用它开刀 一步步剖析 我会讲一下我们可能会接触的技术栈可能不全 但是够用 最后给个学习路线 Tip 请多欣赏一会 每个点看一下 看看什么地方是
  • kali Linux自带firefox ESR设置代理

    1 打开kali的火狐浏览器 找到右上角的 三个杠 在点击 preferences 2 general gt network proxy gt setting 3 打开靶场和burp suite工具 注意火狐浏览器的代理是启动状态 靶场地址
  • 双写绕过的原理

    可以看到代码对key进行了过滤 那怎么办呢 可以构造kekeyy 当key被过滤掉时 剩下的字符自动拼接在一起 就形成了key 所以说 这样就可以拿下flag了
  • 梯度下降(学习笔记)

    应用 梯度下降法 Gradient Descent 又称最速下降法 是迭代法的一种 可用于求解机器学习算法的模型参数 即无约束优化问题 具体来讲可用来求解损失函数的最小值 也可求解最小二乘问题 分类 批量梯度下降 BGD 使用全部样本构建了
  • 职场大佬常用工具:Baklib,一款个人知识笔记管理神器

    又到了大家喜爱的好用工具推荐环节 今天我要给大家推荐一款个人知识笔记管理神器 不出你们所料 它就是Baklib 言归正传那Baklib究竟能干啥呢 引用官网的一句话来说 Baklib工具可以将大家日常工作学习中 存储到电脑 云盘上的文档 知
  • 06makefile学习之三个自动变量($@,$^,$<),模式规则和静态模式规则

    06makefile学习之三个自动变量 lt 和模式规则 以下为相关makefile的学习文章 01makefile学习之GCC编译的四个阶段 带编译阶段 汇编阶段 S c的区别 02makefile学习之makefile的基本原则 03m
  • Oracle存储过程处理大批量数据性能测试

    通过此次的大批量数据性能测试 还会间接的给大家分享一个知识点 Oracle存储过程如何处理List集合的问题 废话不多说了 老规矩直接上代码 首先要做的 想必大家应该猜到了 建表 create table tab 1 id varchar
  • linux内核中打印栈回溯信息 - dump_stack()函数分析

    简介 当内核出现比较严重的错误时 例如发生Oops错误或者内核认为系统运行状态异常 内核就会打印出当前进程的栈回溯信息 其中包含当前执行代码的位置以及相邻的指令 产生错误的原因 关键寄存器的值以及函数调用关系等信息 这些信息对于调试内核错误
  • 使用matlab修改单张或多张图像大小

    使用matlab修改单张或多张图像大小 版权声明 本文为CSDN博主 berlinpand 的原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net berlin
  • 黑马程序员 《ios零基础教程》--全局和局部变量、结构体、枚举 2014-4-2总结

    a href http edu csdn net target self ASP Net Unity开发 a a href http edu csdn net target self Net培训 a 期待与您交流 前几天出差有事儿没学习 今
  • ChatGPT-4.5:AI技术的最新进展

    文章目录 创作者 全栈弄潮儿 个人主页 全栈弄潮儿的个人主页 个人社区 欢迎你的加入 全栈弄潮儿的个人社区 专栏地址 AI大模型 OpenAI最新发布的GPT 4 在聊天机器人的功能上取得了显著的改进 虽然GPT 4仍处于早期阶段 但有传言
  • 在阿里云Ubuntu中使用coturn创建和配置您自己的STUN/TURN服务

    1 前言 此前rtsp转webRTC的本地服务运行的不错 但是使用的某个免费stun服务突然被关停了 造成一些rtspToWebRTC的服务受到影响 因此 目前打算在我闲置的阿里云服务器上搭建stun turn服务 我的域名xiaoyaoy
  • openssl的RSA加密(base64编码)

    openssl的RSA加密 base64编码 同AES加密 开头先给出openssl实现base64编码代码 base64编码 解码 Function base64Encode Description base64 编码 Input 1 i
  • Python:pandas groupby实现类似excel中averageifs函数的功能

    从exccel切换到python进行数据处理 处理的主要还是excel的思路 希望实现类似excel中某个函数的功能 日常主要参考蓝鲸的 从excel到python 目前在做一些统计指标 excel中用了countifs sumifs和av
  • VBA学习基础之1.4条件语句

    VBA学习基础之条件语句 1 4 1 If Then 一个if语句由一个布尔表达式和一个或多个语句组成 如果条件被评估为True 则执行If条件块下的语句 如果条件被评估为False 则执行If循环块后面的语句 If boolean exp
  • Leetcode169.多数元素——摩尔投票

    文章目录 引入 摩尔投票 引入 Leetcode上有如下的题 169 多数元素 给定一个大小为 n 的数组 找到其中的多数元素 多数元素是指在数组中出现次数大于 n 2 的元素 你可以假设数组是非空的 并且给定的数组总是存在多数元素 示例