当前位置: 首页 > news >正文

JZ39 数组中出现次数超过一半的数字

题目:数组中出现次数超过一半的数字_牛客题霸_牛客网

给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。

数据范围:n≤50000n≤50000,数组中元素的值 0≤val≤100000≤val≤10000

要求:空间复杂度:O(1)O(1),时间复杂度 O(n)O(n)

一、方法一:摩尔投票算法

核心思想:在数组中,如果一个数据出现的次数超过了该数组的长度的一半,那就意味着,它出现的次数,比其他元素出现的次数的总和还要多。

  1. 初始化阶段

    • 选择一个候选元素(candidate)

    • 设置计数器 count = 1

  2. 遍历阶段

    • 遍历数组中的每个元素

    • 如果当前元素等于候选元素,count++

    • 如果当前元素不等于候选元素,count--

    • 如果 count 减到 0,更换候选元素为当前元素,并重置 count = 1

代码如下:

int MoreThanHalfNum_Solution(vector<int>& numbers) {// write code hereint candidate = numbers[0];int count = 0;for(auto num : numbers){if(candidate == num){++count;}else {--count;}if(count == 0){candidate = num;count = 1;}}return candidate;}

二、方法二:排序法

核心思想:将数组排序好后,众数肯定在序列的中间。然后可以依次遍历,寻找中间的众数进行验证。

代码:

 int MoreThanHalfNum_Solution(vector<int>& numbers){sort(numbers.begin() ,numbers.end());int cond = numbers[numbers.size()/2];return cond;}

这里有个问题:就是 sort 排序的时间复杂度不稳定,当处于坏情况时,它的时间复杂度是O(NlogN) ,违背了题目的限制。但是这里的题目给的数据很少,几乎和O(N)没有区别。

http://www.dtcms.com/a/470600.html

相关文章:

  • 网站开发智能化方向门户网站建设原则
  • 【React】动态SVG连接线实现:图片与按钮的可视化映射​
  • 专门做油站数据的网站游戏网页版入口
  • 【碎片化学习】SpringBoot数据库驱动介绍配置方法和代码
  • 设计模式篇之 适配器模式 Adapter
  • 小程序怎么制作自己的小程序seo长尾关键词优化
  • 网站备案号规则中核集团2023校园招聘信息
  • postman 做接口测试之学习笔记
  • 做网站要买多少服务器空间有什么做家纺的网站
  • 【编号26】青藏高原地理空间全套数据集(矢量边界、子流域、行政边界、水系等)
  • loguru 和 logging 的详细对比
  • 番禺移动网站建设百度快照投诉中心官网
  • 调试去符号化/strip 过的二进制的调试方法
  • 大连建设局网站地址怎么将自己房子投入网站做民宿
  • 新河网站旅游网站策划方案
  • 建网站备案好麻烦长春市建设工程造价管理协会网站
  • 东莞设计网站建设方案南京网站建设排名
  • Dirty COW容器逃逸漏洞渗透实战:原理+复现 (CVE-2016-5195)
  • 2010 866数据结构 算法设计题——链表,二叉树
  • 对海尔网站建设水平的评价长沙网站备案
  • Codeforces Round 1057 (Div. 2)(A-D)
  • 微信网站备案wordpress step2
  • XSS 漏洞全解析:从原理到实战
  • 傻瓜式 建网站软件外包公司人数
  • Nestjs service 对应token的作用范围
  • Google 智能体设计模式:评估与监控
  • 如何屏蔽网站ipwordpress 商城模板下载
  • OpenMM 8 安装与上手指南
  • 网站建设跟网站开发有什么区别吗832网络销售平台
  • 力扣热题100道49字母异位词分组