在数组中寻找出现次数超过数组长度一半的数
春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。
给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。
[1,2,3,2,2],5返回:2 两种思路:1.建立HashMap,用于统计每个数在数组中出现的次数。遍历数组,将结果存入HashMap中。遍历HashMap,看是否存在出现次数超过一半的数。 2.利用寻找数组中出现次数最多的数的算法得出该数,再次遍历数组看该数出现的次数是否超过数组长度的一半。
1 import java.util.*; 2 3 public class Gift { 4 public int getValue(int[] gifts, int n) { 5 if (gifts == null || gifts.length == 0) { 6 return 0; 7 } 8 if (gifts.length != n) { 9 return 0; 10 } 11 Map<Integer, Integer> map = new HashMap<>(); 12 for (int i = 0; i < n; i++) { 13 if (map.containsKey(gifts[i])) { 14 int count = map.get(gifts[i]); 15 map.put(gifts[i], count + 1); 16 } else { 17 map.put(gifts[i], 1); 18 } 19 } 20 for(Map.Entry<Integer, Integer> entry : map.entrySet()){ 21 if (entry.getValue() > n / 2) { 22 return entry.getKey(); 23 } 24 } 25 return 0; 26 } 27 } 28 29 30 . . 31 添加笔记
转载于:https://www.cnblogs.com/FLAGyuri/p/5325009.html
在数组中寻找出现次数超过数组长度一半的数相关推荐
- 剑指offer:数字在排序数组中出现的次数
题目描述 统计一个数字在排序数组中出现的次数. 解题思路 暴力求解,没用到排序的已知条件. class Solution { public:int GetNumberOfK(vector<int ...
- 《剑指offer》-- 调整数组顺序使奇数位于偶数前面、顺时针打印矩阵、数字在排序数组中出现的次数
一.调整数组顺序使奇数位于偶数前面: 1.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之 ...
- 【C语言】计算数字在升序数组中出现的次数的两种方法
题目:数字在升序数组中出现的次数 描述:给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数 要求:数据范围:0≤n≤1000,0≤k≤100,数组中每个元素的值满 ...
- 【剑指offer-Java版】38数字在排序数组中出现的次数
数字在排序数组中出现的次数: 最简单粗暴的方法是O(n^2) 可能的解法可以采用二分,首先根据二分找到给定数字在数组中的位置,然后再左右二分,找到边界(第一个和最后一个),左右边界的差值就是出现次数 ...
- 数字在数组中出现的次数
目:统计一个数字k在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,输出4次 方案一:扫描数组,记录第一个出现的k和最后一个k中间有多少个,时间复杂度为O(n) 方案 ...
- 面试题整理11 数字在排序数组中出现的次数
<剑指offer>面试题38: 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在此数组中出现了4次,因此输出4. 分析:看到排 ...
- 【C语言】数字在排序数组中出现的次数(改动)
//数字在排序数组中出现的次数(改动) //统计一个数字在排序数组中出现的次数.比如:排序数组{1,2,3,3,3.3,4,5}和数字3,因为3出现了4次,因此输出4. #include <st ...
- 剑指Offer(Java版):数字在排序数组中出现的次数
2019独角兽企业重金招聘Python工程师标准>>> 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组为 {1,2,3,3,,3,3,4,5}和数字3,由于3在这个数组中 ...
- 数组中有一个数字出现的次数超过数组长度的一半
题目: 数组中有一个数字出现的次数超过数组长度的一半.请找出这个数字. 解答: 1 public class Solution { 2 3 public int MoreThanHalfNum_Sol ...
最新文章
- 【c++】4.std::shared_ptr、std::make_shared、 .get() 、.data()、void *p 的用法、裸指针
- 《高效程序员的45个习惯》-末篇
- 【Python】【Python库】Python3.7.2 - 字符串str类 (1)
- 优麒麟这样的linux版本,百度网盘 Linux 版发布,搭配优麒麟运行更完美!
- Linux内核开发_3_busybox
- 活动目录(Active Directory)域故障解决实例(转载)
- 在Linux操作系统下修改IP、DNS和路由配置
- 第一次学会!=EOF
- io流之转换流InputStreamReader、OutputStreamWriter
- SAP官网学习教程(3) HANA数据库开发
- 360服务器安全加固系统,360政企安全
- 服务器操作系统怎么设置密码,服务器操作系统怎么设置密码
- 非线性优化库NLopt简介
- 关于加拿大IC认证变更为ISED认证亚马逊卖家需要注意那些问题?
- 橙单微服务的权限部分之过滤规则
- 推荐windows系统10款好用的软件,让你使用体验飞升
- 三维设计师梦寐以求的应用软件-Maya快捷键分享
- PCL学习笔记(30)——法线估计normal_estimation
- 智慧景区整体规划建设运营解决方案
- Renamer for Mac 6.0.6批量重命名文件。
热门文章
- 高斯拟合原理_数据分析中的插值与拟合(2) —— 拟合
- C++中如何读取一个数的位数_初中数学:近似数和平均数知识点总结及练习
- 递归法:财务金额漏掉1笔或者几笔(排列组合)
- bzoj 4300: 绝世好题
- linux删除文件文件夹
- [bug解决] Ubantu打不开Typora:typora error while loading shared libraries libXss.so.1
- python机器学习库sklearn——DBSCAN密度聚类
- python应用系列教程——python使用SocketServer实现网络服务器,socket实现客户端
- matlab2c使用c++实现matlab函数系列教程-tanh函数
- 频率分布直方图组距如何确定_频率分布有关的概念