多数元素(哈希表和投票法)
力扣算法面试题汇总
问题描述:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
例:
输入: [2,2,1,1,1,2,2]
输出: 2
# 输入
nums = [2,2,1,1,1,2,2]
1. O(n2)O(n^2)O(n2)算法
思路:尽量减少遍历次数,利用字典,可以做到只遍历一次
# 字典:key,数组元素;value,元素个数
dic = {}
# 遍历
for i in range(len(nums)):dic.setdefault(nums[i], 0)dic[nums[i]] += 1# 检查是否有次数大于n/2if dic[nums[i]] > math.floor(n/2):print(nums[i])break
力扣上的结果(96%):
可以看到,在这之前,还有一部分的分布,基本上可以判断前面用的是另一种算法。
通过查阅官方解法,知道前面用字典的办法实际上是一种哈希表的方法。实际上,还有另一种方法。
2. O(n)O(n)O(n)
思路:
第一步:将当前元素设为候选众数
第二步:开始遍历,遇到候选众数加1,非候选众数减1
第三步:如果数为0,则将下一个数设为新的候选众数,并将数重置为1,返回第一步
# O(n)算法
temp_majority = nums[0]
num_majority = 0; # 遇候选众数加1,非候选众数减1
for i in range(1, len(nums)):# 遇候选众数加1if temp_majority == nums[i-1]:num_majority += 1else:# 遇非候选众数减1num_majority -= 1# 如果数为0,则将下一个数记为非候选众数if num_majority == 0:temp_majority = nums[i]
print(temp_majority)
力扣结果稍有提升(96.7%):
多数元素(哈希表和投票法)相关推荐
- PAT甲级1145 Hashing - Average Search Time:[C++题解]哈希表、哈希表开放寻址法、二次探测法、求平均查找次数
文章目录 题目分析 题目链接 题目分析 来源:acwing 本题的分析见另一道PAT的题目:PAT甲级1078 Hashing:[C++题解]哈希表.哈希表开放寻址法.二次探测法链接的题目就是让建立h ...
- 【LeetCode笔记】169. 多数元素(Java、摩尔投票法、哈希表)
文章目录 题目描述 思路 & 代码 思路一:哈希表 思路二: 摩尔投票法 题目描述 好家伙,这是今天最有意思的题目了 思路 & 代码 思路一:哈希表 先说缺点:空间复杂度O(n) 一次 ...
- LeetCode 169. 多数元素 (哈希映射|投票算法)
169. 多数元素 题意: 多数:数组中出现次数大于n2\frac{n}{2}2n 的数 输入一个含有多数元素的数组 找出该多数 解法1 (暴力法) 思路: 找出数组中每一个元素出现的次数 次数保存 ...
- 7-45 航空公司VIP客户查询 【哈希表 链地址法】
不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务.现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快速查询会员里程积分 ...
- PAT甲级1078 Hashing:[C++题解]哈希表、哈希表开放寻址法、二次探测法
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 本题建立hash表是利用只具有正增量的二次探测法来解决冲突, 索引 = 数 % 哈希表的大小 如果映射到同一个索引idx,hash表 ...
- 【基础算法】哈希表(拉链法)
- 网络编程之 哈希表原理讲解 来自老司机的源码
鉴于博主很久没由跟新过数据结构的内容了,所以博主打算给大家讲解一下哈希表的操作 下面的内容来自于一位老司机 martin的源码,博主在这里借用一下,目的是突出哈希表的原理,明天博主就周末了,也能腾出时 ...
- JavaScript 数据结构与算法(二)哈希表
本文参考文献:https://www.cnblogs.com/AhuntSun-blog/p/12636718.html 配套视频教程:https://www.bilibili.com/video/B ...
- 算法--猜字谜(哈希表优化)
算法–猜字谜(哈希表优化) 元宵节的时候,力扣上的每日一题是这样的: 外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧. 字谜的迷面 puzzle 按字符串形式给出,如果一个单词 wo ...
最新文章
- View绘制流程的入口
- 漫画:什么是快速排序?(完整版)
- Linux 操作系统原理 — 系统结构
- 你真的了解 Cookie 和 Session 吗?
- Matlab-OpenCV-VC-混合编程配置
- 类模板与运算符重载(一个简单的例子)
- MFC新建文件夹、打开文件夹的实现方法
- 继承中的复制构造、赋值、析构、重载
- 【laravel5.4】查询构造器对象与模型instance的互相换换
- 希捷四十载:如何做好一家非常规存储公司?
- java21天打卡-day2
- AutoCAD2020命令提示框信息设置
- 基于51单片机的医院银行排队叫号系统proteus仿真程序原理图设计
- unity 游戏版本更新插件
- 前端素材库网站集合——网站集合
- java直播在线人数怎么做_添加抖音直播间在线人数怎么做
- html英文书籍推荐,Html英文
- MarkDown编辑器----小书匠
- Facebook CTF 2019 Products Manager
- 一个程序员是如何蜕变为投资人的?