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

可视化图解算法68:数组中出现次数超过一半的数字

1.题目

描述

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

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

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

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

输入描述:

保证数组输入非空,且保证有解

示例1

输入:

[1,2,3,2,2,2,5,4,2]

返回值:

2

示例2

输入:

[3,3,3,3,2,2,2]

返回值:

3

示例3

输入:

[1]

返回值:

1

2. 题解思路

本题的关键是统计数字出现的次数,可以想到用map实现。map中的key为数组元素(数字),value为出现的次数(默认为0)。

具体思路是:

  1. 定义一个哈希表(map);

  2. 遍历数组,对元素出现的次数进行统计(map中的key为元素,value为元素出现的次数);

  3. 遍历map,查看key对应的值是否超过数组长度的一半。

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python版本:https://www.bilibili.com/cheese/play/ep1374987https://www.bilibili.com/cheese/play/ep1374987

  • Java版本:https://www.bilibili.com/cheese/play/ep1368277https://www.bilibili.com/cheese/play/ep1368277

  • Golang版本:https://www.bilibili.com/cheese/play/ep1368661https://www.bilibili.com/cheese/play/ep1368661

3.编码实现

核心代码如下:

func MoreThanHalfNum_Solution(numbers []int) int {// 1.定义一个哈希表(map)hastTable := make(map[int]int)//2.遍历数组,对元素出现的次数进行统计(map中的key为元素,value为元素出现的次数)for _, v := range numbers {hastTable[v]++}//3.遍历map,查看key对应的值是否超过数组长度的一半for key, _ := range hastTable {if hastTable[key] > len(numbers)/2 {return key}}return -1
}

具体完整代码你可以参考下面视频的详细讲解。

  • Python版本:https://www.bilibili.com/cheese/play/ep1374987https://www.bilibili.com/cheese/play/ep1374987

  • Java版本:https://www.bilibili.com/cheese/play/ep1368277https://www.bilibili.com/cheese/play/ep1368277

  • Golang版本:https://www.bilibili.com/cheese/play/ep1368661https://www.bilibili.com/cheese/play/ep1368661

4.总结

如果算法题目遇到统计次数个数等,一般用map来实现,key存储元素,value存储个数。

《数据结构与算法》深度精讲课程正式上线啦!7 大核心算法模块全解析:

  ✅   链表

  ✅   二叉树

  ✅   二分查找、排序

  ✅   堆、栈、队列

  ✅   回溯算法

  ✅   哈希算法

  ✅   动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

  • Python编码实现:https://www.bilibili.com/cheese/play/ss897667807https://www.bilibili.com/cheese/play/ss897667807

  • Java编码实现:https://www.bilibili.com/cheese/play/ss161443488https://www.bilibili.com/cheese/play/ss161443488

  • Golang编码实现:https://www.bilibili.com/cheese/play/ss63997https://www.bilibili.com/cheese/play/ss63997

对于LeetCode数据结构与算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:会当凌绝顶,一览众山小。

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

相关文章:

  • 在ec2上部署CosyVoice2模型
  • wish跨境电商平台四川成都网站优化
  • GitHub Copilot 与 Visual Studio 漏洞可致攻击者绕过安全防护功能
  • 将qt界面中加载css或者qss样式
  • 离线部署指南:本地下载MySQL 8.0.37并上传服务器Centos7.9安装
  • Camera Tuning:视觉时代的核心岗位
  • 商城类网站怎么优化网站建设实验代码
  • 【JavaEE】-- IoC DI
  • 制作网站低价网页设计的重点和难点
  • 基于灵动MM32F0130 MCU微控制器的智能插排设计
  • Java-170 Neo4j 事务、索引与约束实战:语法、并发陷阱与速修清单
  • Javaee—— CAS
  • 图片上传git时压缩
  • Flutter 聊天界面使用ListView的reverse:true,导致条目太少的时候会从下往上显示,导致顶部大片空白
  • 湛江市政工程建设公司网站仿别人的网站违法嘛
  • 石景山企业网站建设公司网站开发策划
  • RDMA拥塞控制之CNP
  • 终端Kitty,主要是看有人聊到opencode需要的终端
  • 基于Python的新能源汽车销量数据分析与预测系统设计与实现
  • android recyclerview缓存_缓存问题解决办法
  • GEN-0深度剖析:物理交互数据如何重塑机器人学习的“扩展定律”
  • 各大网站的名字大全百度招聘
  • 泰州网站关键词优化软件咨询在线crm系统是啥
  • ZC序列的原理及在LTE中的应用
  • 山东网站seo推广优化价格对单位网站的要求吗
  • Ubuntu25.10安装Samba
  • Ubuntu 虚拟机文件传输到 Windows的一种好玩的办法
  • 找别人做网站都需要注意啥wordpress访问私密帖子
  • 网站备案需要关闭台州华燕网业有限公司
  • 3D装配动画结合MES系统,助力制造业无纸化办公