主要元素(超过一半元素)
数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1
。请设计时间复杂度为 O(N)
、空间复杂度为 O(1)
的解决方案。
示例 1:
输入:[1,2,5,9,5,9,5,5,5] 输出:5
示例 2:
输入:[3,2] 输出:-1
示例 3:
输入:[2,2,1,1,1,2,2] 输出:2
示例代码1(投票算法):
class Solution(object):def majorityElement(self, nums):""":type nums: List[int]:rtype: int"""count = 0for num in nums:if count == 0:ans = numif num == ans:count += 1else:count -= 1return ans if count and nums.count(ans) > len(nums) // 2 else -1
解题思路
超过半数和不超过半数的值最大的区别是什么?
当我们扫描一遍下来的时候,直接进行一个只要两个不同就可以消除的消消乐,如果有超过半数的值,那么剩下的这个值必然是它。
这是因为其他值总共也没有这个值的人数多,所以不管怎么消除,这个值都会留下来。
(注意: 只有超过半数才一定会最终留下来,连等于半数都不一定是最终留下来的结果。而即使小于等于半数的留下来,也无法通过第二轮验证)
全部消除后count为0,即可以两两消除,必然不存在超过半数的值,不用进行第二轮验证。
第二轮验证:
原数组没有超过半数的值的时候,也可能有剩下的值。
比如说 [1,2,3],在消除过后仍然可以得到3。
所以还需要遍历一遍统计上轮发现的值的个数,确保它是超过半数的。
复杂度分析
- 时间复杂度:O(N)O(N),其中 N 为数组长度
- 空间复杂度:O(1)O(1)
示例代码2:
class Solution(object):def majorityElement(self, nums):""":type nums: List[int]:rtype: int"""nums.sort()x = len(nums) // 2return -1 if nums.count(nums[x]) <= x else nums[x]
思路解析:找到中间元素,统计中间元素个数,判断是否大于元素总数的一半,是返回元素,不是返回-1
主要元素(超过一半元素)相关推荐
- 让元素固定_49种元素对钢铁性能的影响
元素1:H(氢) 对钢铁性能的影响: H是一般钢中最有害的元素,钢中溶有氢会引起钢的氢脆.白点等缺陷.氢与氧.氮一样,在固态钢中溶解度极小,在高温时溶入钢液,冷却时来不及逸出而积聚在组织中形成高压细微 ...
- 1.1 软件架构含义
The software architecture of a system is the set of structures needed to reason about the system, wh ...
- java架构图怎么画_架构模型图怎么画java
逻辑视图 开发视图 过程视图 物理视图 场景视图 4+1视图提出后,业界也有其它的观点提出,诸如SEI(模块视图.组建和连接件视图.分配视图).西门子4种视图(概念.模块.代码.执行视图).以及RM- ...
- 强化学习之入门笔记(一)
文章目录 强化学习 一.入门强化学习 基本元素 主要元素 核心元素 二.基础概念 1.马尔科夫链 2.马尔科夫"链" 3.强化学习中的Q值和V值 更复杂的未来 Q和V的意义 V值的 ...
- widget中文技术文档
Version 3.1.1 版 2006 年 4 月 14 日 著作权 2002-2006 Yahoo! Inc. 保留所有权利 版本历史 第一次发行 第二次发行 第三次发行 第四次发行 第五 ...
- C++版本OpenCv教程
C++版本OpenCv教程(一)Mat-基本的图像容器 目标 我们有多种方法从现实世界获取数字图像:数码相机.扫描仪.计算机断层扫描和磁共振成像等等.在以上任何情况下,我们(人类)看到的都是图像.然而 ...
- ios 替换数组中元素_leetcode169 数组中的主要元素
数组中的主要元素 leetcode#169题,找出一个数组中出现次数超过 次数的元素,也就是过半的主要元素.题目来源: https://leetcode.com/problems/majority-e ...
- leetcode——面试题 17.10. 主要元素
问题描述: 数组中占比超过一半的元素称之为主要元素.给定一个整数数组,找到它的主要元素.若没有,返回-1. 示例 1: 输入:[1,2,5,9,5,9,5,5,5] 输出:5 示例 2: 输入:[3, ...
- 面试题 17.10. 主要元素
题目 数组中占比超过一半的元素称之为主要元素.给你一个 整数 数组,找出其中的主要元素.若没有,返回 -1 .请设计时间复杂度为 O(N) .空间复杂度为 O(1) 的解决方案. 示例 1: 输入:[ ...
最新文章
- python3:利用SMTP协议发送QQ邮件+附件
- 从DDD看企业级问题解决方案框架
- 单词不用背,学完自然会!”这个方法,你知道越早越好!
- [Voice communications] 让音乐响起来
- 条形压电陶瓷执行器件和高压驱动器
- 使用mss2sql将SqlServer转换为Mysql
- 《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记
- iOS Hacker 反注入和反反注入
- Tomcat启动阻塞变慢
- android 初始化语言,25.Android init language (安卓初始化语言)
- 设计模式学习笔记——代理(Proxy)模式
- es6 Class 不存在变量提升
- tensorflow项目构建流程
- Web项目中使用Spring 3.x + Quartz 2.x实现作业调度详解
- cut、tr、wc、sort4
- 汽车后市场的大数据引擎谁人可造
- 最新的SAS SID 2023可用至2023年1月SAS 9.4 SID续订更新sas sid 2022服务器通用版server
- 淘宝新店提升必备-直通车如何开
- html自动拿微信扫描,HTML——微信浏览器H5页面调用微信扫一扫
- 输入输入是否为回文(如“abcba”和”123321”都是回文)。(c语言)
热门文章
- 重磅:腾讯正式开源图计算框架Plato,十亿级节点图计算进入分钟级时代
- 2019北京智源大会在京开幕, 中外学术大咖共话人工智能研究前沿
- 吴恩达与LG握手合作!
- 倒计时1天,2018中国大数据技术大会报名通道即将关闭(附参会提醒)
- AI 一分钟 | 特斯拉科技创新中心落户北京;麻省理工开发透视技术
- 资源 | 机器学习、NLP、Python和Math最好的150余个教程(建议收藏)
- 重磅!Elasticsearch 8 正式发布!
- IDEA那些既好用又好玩的30多款宝贝插件,你知道多少?
- synchronized 的超多干货!
- 腾讯面试官:如何停止一个正在运行的线程?我蒙了。。。