算法:多数元素,多种解法
前言:
以前做数学题的时候,老师说:你们学习多种解题方法。遇到类似不同的问题,你都会了,这样能提高解题能力。如果你写出多种解法,面试官会对你刮目相看。
下面一题,我们将用多种解法实现,是面试中常见的一题。
题目:
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指,在数组中出现次数,大于 n / 2 的元素。
例子:int a[3] = {1, 2, 2} ,多数元素是 2 。
你可以假设数组是非空的,并且给定的数组中,总是存在多数元素。
解法一:哈希表
动画演示:
代码如下:
哈希表方法:一边遍历,一边计数,一边找众数,并不是先计数完,再去遍历一次找最大值。
时间复杂度:O(n) ;空间复杂度:O(n)
解法二:排序
代码如下:
对数组排序后,直接可以通过下标来判断众数,这个方法简单。
时间复杂度:O(nlogn);空间复杂度:O(nlogn)
解法三:分治
动画演示:
代码如下:
先将数组划分,然后分别找到左边的众数和右边的众数,然后根据找到的众数和数组长度的 1 / 2 进行比较。
时间复杂度:O(nlogn) ;空间复杂度:O(nlogn)
解法4:Boyer- Moore算法
思想:我们把众数记为 +1,把其他数记为 -1,将它们全部加起来,显然和大于 0。从结果本身,我们可以看出,众数比其他数多。
代码如下:
遍历数组 nums 中的所有元素,对于每个元素 x,在判断 x 之前,如果 count 的值为 0,先将 x 的值赋予 more,随后我们判断 x:
如果 x 与 more相等,那么计数器 count 的值增加 1;
如果 x 与 more不等,那么计数器 count 的值减少 1。
时间复杂度:O(n);空间复杂度:O(1)
絮叨
面试过程中,选择你熟悉的算法中,时间和空间复杂度最优的解法,平时训练多种方法都要懂,提高算法能力。
专注后台开发相关技术,广度深度并存,干货情怀同在。
微信搜索【盼盼编程】关注这个不一样的程序员。
算法:多数元素,多种解法相关推荐
- 计算机求百钱买百鸡采用的算法,多种解法求百钱百鸡问题.doc
多种解法求百钱百鸡问题 学 号: 0121210680225 <算法设计与分析B> 大 作 业 题 目多种解法求百钱百鸡问题学 院计算机科学与技术学院专 业软件工程班 级Sy1201姓 名 ...
- Minimum Inversion Number HDU - 1394(求一个数字环的逆序对+多种解法)
题意: 给出n个数(0~n-1,每个数仅出现一次),问它长为n的循环序列中逆序对最少的数量. 多种解法:暴力+树状数组+分治+规律推导公式 题目: The inversion number of a ...
- 最大公约数(gcd)和最小公倍数(lcm)的多种解法 Java 实现
下面总共介绍了四种最大公约数的求解方法和一个最小公倍数的求解方法 该代码的视频讲解 [300题刷题挑战]leetcode力扣 最大公约数和最小公倍数的多种解法 GCDandLCM第八十三题 | 数学方 ...
- 0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题
1.蒙特卡罗算法 基本概述 蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法.传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地 ...
- LeetCode 148. Sort List--面试算法题--C++,Python解法
LeetCode 148. Sort List–面试算法题–C++,Python解法 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结:LeetCode 所有题目总结 大 ...
- 稳定快速的算法,并且支持多种用户界面TOSCA V9.0
Ilight.Fieldviev.V8.0.Mulitplatform 2CD CFD后置处理 ESI_CFDRC_V2007 正式版 ESI_CFDRC_V2006計算流體力學套裝應用軟體 BLUE ...
- 算法笔记_001:斐波那契数的多种解法(Java)
本篇文章解决的问题来源于算法设计与分析课程的课堂作业,主要是运用多种方法来计算斐波那契数.具体问题及解法如下: 一.问题1: 问题描述:利用迭代算法寻找不超过编程环境能够支持的最大整数的斐波那契数是第 ...
- java 电梯算法_编程之美之小飞的电梯调度算法(多种解法)---Java语言
1.题目情景 我们假设都是从一楼上电梯的,而至于讯电梯停在其中的某一层.即所有的乘客都从一楼上电梯,到达某层之后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层.在一楼的时候,每个乘客选择自己的目的 ...
- 最长回文子串(多种解法,附马拉车算法)
目录 •写在前面 •题目 •解法一 暴力破解 •解法二 暴力优化 •解法三 最长公共子串(动态规划整体) •解法四 中心扩展法 •解法五 马拉车算法 •结束 •写在前面 这种类型的题目算是比 ...
最新文章
- iPhone12 safeArea顶部区域尺寸变化
- python地图散点图_在地图上叠加散点图(img)
- 不顾父母哀求,北大数学天才毕业后坚持出家:理想现实间的挣扎
- 解决Vue3创建项目后的Error: Cannot find module ‘vue-loader-v16/package.json‘问题
- Java开发者必须掌握的15个框架
- java 压缩二进制流_Java:自己动手写压缩软件,超详细解释(哈夫曼实现)
- JavaScript(五):变量的作用域
- buf.indexOf()
- 直线扫描转换算法DDA算法(数值微分算法)
- Poker Ⅱ 机械键盘使用说明书 自备
- apk与服务器的ip在哪个文件夹,手机中apk文件存放目录在哪
- 饥荒联机版服务器控制台本地和在线,饥荒联机服务器常用控制台指令
- 05 hex 格式_hex文件格式总结
- 褚时健 | 我这辈子最问心无愧的就是:没有庸庸碌碌地过完一生
- MTTR、MTTF、MTBF
- JavaScript---BOM基础
- 梳妆台行业调研报告 - 市场现状分析与发展前景预测
- python小游戏课程设计报告_贪吃蛇游戏课程设计报告
- Java8 LocalDateTime 获取当前日周月年的起止时间
- Java 小项目——字符界面收银台(优化版)
热门文章
- 【Android 应用开发】Android 返回堆栈 与 任务
- 【数理逻辑】范式 ( 合取范式 | 析取范式 | 大项 | 小项 | 极大项 | 极小项 | 主合取范式 | 主析取范式 | 等值演算方法求主析/合取范式 | 真值表法求主析/合取范式 )
- 【JavaEE WEB 开发】Tomcat 详解 Servlet 入门
- 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战
- 练习一:数学计算 有四个数字,分别是1,2,3,4,请问可以组成多少个相互不重复的数字,各是多少...
- 数据性能调校——查看最耗资源的各种SQL
- 使用 ftrace 调试 Linux 内核,第 2 部分
- 【代码片段】base样式--针对bootstrap
- MYSQL 取随机记录的方法
- [导入]ubuntu全面介绍 与 ubuntu截图