数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -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

主要元素(超过一半元素)相关推荐

  1. 让元素固定_49种元素对钢铁性能的影响

    元素1:H(氢) 对钢铁性能的影响: H是一般钢中最有害的元素,钢中溶有氢会引起钢的氢脆.白点等缺陷.氢与氧.氮一样,在固态钢中溶解度极小,在高温时溶入钢液,冷却时来不及逸出而积聚在组织中形成高压细微 ...

  2. 1.1 软件架构含义

    The software architecture of a system is the set of structures needed to reason about the system, wh ...

  3. java架构图怎么画_架构模型图怎么画java

    逻辑视图 开发视图 过程视图 物理视图 场景视图 4+1视图提出后,业界也有其它的观点提出,诸如SEI(模块视图.组建和连接件视图.分配视图).西门子4种视图(概念.模块.代码.执行视图).以及RM- ...

  4. 强化学习之入门笔记(一)

    文章目录 强化学习 一.入门强化学习 基本元素 主要元素 核心元素 二.基础概念 1.马尔科夫链 2.马尔科夫"链" 3.强化学习中的Q值和V值 更复杂的未来 Q和V的意义 V值的 ...

  5. widget中文技术文档

    Version 3.1.1 版 2006 年 4 月 14 日   著作权 2002-2006 Yahoo! Inc. 保留所有权利   版本历史 第一次发行 第二次发行 第三次发行 第四次发行 第五 ...

  6. C++版本OpenCv教程

    C++版本OpenCv教程(一)Mat-基本的图像容器 目标 我们有多种方法从现实世界获取数字图像:数码相机.扫描仪.计算机断层扫描和磁共振成像等等.在以上任何情况下,我们(人类)看到的都是图像.然而 ...

  7. ios 替换数组中元素_leetcode169 数组中的主要元素

    数组中的主要元素 leetcode#169题,找出一个数组中出现次数超过 次数的元素,也就是过半的主要元素.题目来源: https://leetcode.com/problems/majority-e ...

  8. leetcode——面试题 17.10. 主要元素

    问题描述: 数组中占比超过一半的元素称之为主要元素.给定一个整数数组,找到它的主要元素.若没有,返回-1. 示例 1: 输入:[1,2,5,9,5,9,5,5,5] 输出:5 示例 2: 输入:[3, ...

  9. 面试题 17.10. 主要元素

    题目 数组中占比超过一半的元素称之为主要元素.给你一个 整数 数组,找出其中的主要元素.若没有,返回 -1 .请设计时间复杂度为 O(N) .空间复杂度为 O(1) 的解决方案. 示例 1: 输入:[ ...

最新文章

  1. python3:利用SMTP协议发送QQ邮件+附件
  2. 从DDD看企业级问题解决方案框架
  3. 单词不用背,学完自然会!”这个方法,你知道越早越好!
  4. [Voice communications] 让音乐响起来
  5. 条形压电陶瓷执行器件和高压驱动器
  6. 使用mss2sql将SqlServer转换为Mysql
  7. 《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记
  8. iOS Hacker 反注入和反反注入
  9. Tomcat启动阻塞变慢
  10. android 初始化语言,25.Android init language (安卓初始化语言)
  11. 设计模式学习笔记——代理(Proxy)模式
  12. es6 Class 不存在变量提升
  13. tensorflow项目构建流程
  14. Web项目中使用Spring 3.x + Quartz 2.x实现作业调度详解
  15. cut、tr、wc、sort4
  16. 汽车后市场的大数据引擎谁人可造
  17. 最新的SAS SID 2023可用至2023年1月SAS 9.4 SID续订更新sas sid 2022服务器通用版server
  18. 淘宝新店提升必备-直通车如何开
  19. html自动拿微信扫描,HTML——微信浏览器H5页面调用微信扫一扫
  20. 输入输入是否为回文(如“abcba”和”123321”都是回文)。(c语言)

热门文章

  1. 重磅:腾讯正式开源图计算框架Plato,十亿级节点图计算进入分钟级时代
  2. 2019北京智源大会在京开幕, 中外学术大咖共话人工智能研究前沿
  3. 吴恩达与LG握手合作!
  4. 倒计时1天,2018中国大数据技术大会报名通道即将关闭(附参会提醒)
  5. AI 一分钟 | 特斯拉科技创新中心落户北京;麻省理工开发透视技术
  6. 资源 | 机器学习、NLP、Python和Math最好的150余个教程(建议收藏)
  7. 重磅!Elasticsearch 8 正式发布!
  8. IDEA那些既好用又好玩的30多款宝贝插件,你知道多少?
  9. synchronized 的超多干货!
  10. 腾讯面试官:如何停止一个正在运行的线程?我蒙了。。。