力扣算法面试题汇总

问题描述:给定一个大小为 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%):

多数元素(哈希表和投票法)相关推荐

  1. PAT甲级1145 Hashing - Average Search Time:[C++题解]哈希表、哈希表开放寻址法、二次探测法、求平均查找次数

    文章目录 题目分析 题目链接 题目分析 来源:acwing 本题的分析见另一道PAT的题目:PAT甲级1078 Hashing:[C++题解]哈希表.哈希表开放寻址法.二次探测法链接的题目就是让建立h ...

  2. 【LeetCode笔记】169. 多数元素(Java、摩尔投票法、哈希表)

    文章目录 题目描述 思路 & 代码 思路一:哈希表 思路二: 摩尔投票法 题目描述 好家伙,这是今天最有意思的题目了 思路 & 代码 思路一:哈希表 先说缺点:空间复杂度O(n) 一次 ...

  3. LeetCode 169. 多数元素 (哈希映射|投票算法)

    169. 多数元素 题意: 多数:数组中出现次数大于n2\frac{n}{2}2n​ 的数 输入一个含有多数元素的数组 找出该多数 解法1 (暴力法) 思路: 找出数组中每一个元素出现的次数 次数保存 ...

  4. 7-45 航空公司VIP客户查询 【哈希表 链地址法】

    不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务.现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快速查询会员里程积分 ...

  5. PAT甲级1078 Hashing:[C++题解]哈希表、哈希表开放寻址法、二次探测法

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 本题建立hash表是利用只具有正增量的二次探测法来解决冲突, 索引 = 数 % 哈希表的大小 如果映射到同一个索引idx,hash表 ...

  6. 【基础算法】哈希表(拉链法)

  7. 网络编程之 哈希表原理讲解 来自老司机的源码

    鉴于博主很久没由跟新过数据结构的内容了,所以博主打算给大家讲解一下哈希表的操作 下面的内容来自于一位老司机 martin的源码,博主在这里借用一下,目的是突出哈希表的原理,明天博主就周末了,也能腾出时 ...

  8. JavaScript 数据结构与算法(二)哈希表

    本文参考文献:https://www.cnblogs.com/AhuntSun-blog/p/12636718.html 配套视频教程:https://www.bilibili.com/video/B ...

  9. 算法--猜字谜(哈希表优化)

    算法–猜字谜(哈希表优化) 元宵节的时候,力扣上的每日一题是这样的: 外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧. 字谜的迷面 puzzle 按字符串形式给出,如果一个单词 wo ...

最新文章

  1. View绘制流程的入口
  2. 漫画:什么是快速排序?(完整版)
  3. Linux 操作系统原理 — 系统结构
  4. 你真的了解 Cookie 和 Session 吗?
  5. Matlab-OpenCV-VC-混合编程配置
  6. 类模板与运算符重载(一个简单的例子)
  7. MFC新建文件夹、打开文件夹的实现方法
  8. 继承中的复制构造、赋值、析构、重载
  9. 【laravel5.4】查询构造器对象与模型instance的互相换换
  10. 希捷四十载:如何做好一家非常规存储公司?
  11. java21天打卡-day2
  12. AutoCAD2020命令提示框信息设置
  13. 基于51单片机的医院银行排队叫号系统proteus仿真程序原理图设计
  14. unity 游戏版本更新插件
  15. 前端素材库网站集合——网站集合
  16. java直播在线人数怎么做_添加抖音直播间在线人数怎么做
  17. html英文书籍推荐,Html英文
  18. MarkDown编辑器----小书匠
  19. Facebook CTF 2019 Products Manager
  20. 一个程序员是如何蜕变为投资人的?

热门文章

  1. sweetalert2不相应回车_你还不知道的SketchUp建模小技能
  2. ipython是一个交互式计算系统_IPython :一个交互式计算和开发环境-Python
  3. 3d 多相机分流_徕卡电影四摄的华为Mate30 Pro到底有多猛?开箱了解一下!
  4. 深度学习————如何在Python中求解函数的解析表达式
  5. 【lucene】入门级
  6. vue项目首屏加载过久处理笔记
  7. Linux防火墙配置与管理(16)
  8. scrapy 爬虫-爬美食节
  9. CSS background 属性
  10. Tomcat Script(python)