春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。

给定一个红包的金额数组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

在数组中寻找出现次数超过数组长度一半的数相关推荐

  1. 剑指offer:数字在排序数组中出现的次数

    题目描述 统计一个数字在排序数组中出现的次数. 解题思路 暴力求解,没用到排序的已知条件. class Solution { public:int GetNumberOfK(vector<int ...

  2. 《剑指offer》-- 调整数组顺序使奇数位于偶数前面、顺时针打印矩阵、数字在排序数组中出现的次数

    一.调整数组顺序使奇数位于偶数前面: 1.题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之 ...

  3. 【C语言】计算数字在升序数组中出现的次数的两种方法

    题目:数字在升序数组中出现的次数 描述:给定一个长度为 n 的非降序数组和一个非负数整数 k ,要求统计 k 在数组中出现的次数 要求:数据范围:0≤n≤1000,0≤k≤100,数组中每个元素的值满 ...

  4. 【剑指offer-Java版】38数字在排序数组中出现的次数

    数字在排序数组中出现的次数: 最简单粗暴的方法是O(n^2) 可能的解法可以采用二分,首先根据二分找到给定数字在数组中的位置,然后再左右二分,找到边界(第一个和最后一个),左右边界的差值就是出现次数 ...

  5. 数字在数组中出现的次数

    目:统计一个数字k在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,输出4次 方案一:扫描数组,记录第一个出现的k和最后一个k中间有多少个,时间复杂度为O(n) 方案 ...

  6. 面试题整理11 数字在排序数组中出现的次数

    <剑指offer>面试题38: 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在此数组中出现了4次,因此输出4. 分析:看到排 ...

  7. 【C语言】数字在排序数组中出现的次数(改动)

    //数字在排序数组中出现的次数(改动) //统计一个数字在排序数组中出现的次数.比如:排序数组{1,2,3,3,3.3,4,5}和数字3,因为3出现了4次,因此输出4. #include <st ...

  8. 剑指Offer(Java版):数字在排序数组中出现的次数

    2019独角兽企业重金招聘Python工程师标准>>> 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组为 {1,2,3,3,,3,3,4,5}和数字3,由于3在这个数组中 ...

  9. 数组中有一个数字出现的次数超过数组长度的一半

    题目: 数组中有一个数字出现的次数超过数组长度的一半.请找出这个数字. 解答: 1 public class Solution { 2 3 public int MoreThanHalfNum_Sol ...

最新文章

  1. 【c++】4.std::shared_ptr、std::make_shared、 .get() 、.data()、void *p 的用法、裸指针
  2. 《高效程序员的45个习惯》-末篇
  3. 【Python】【Python库】Python3.7.2 - 字符串str类 (1)
  4. 优麒麟这样的linux版本,百度网盘 Linux 版发布,搭配优麒麟运行更完美!
  5. Linux内核开发_3_busybox
  6. 活动目录(Active Directory)域故障解决实例(转载)
  7. 在Linux操作系统下修改IP、DNS和路由配置
  8. 第一次学会!=EOF
  9. io流之转换流InputStreamReader、OutputStreamWriter
  10. SAP官网学习教程(3) HANA数据库开发
  11. 360服务器安全加固系统,360政企安全
  12. 服务器操作系统怎么设置密码,服务器操作系统怎么设置密码
  13. 非线性优化库NLopt简介
  14. 关于加拿大IC认证变更为ISED认证亚马逊卖家需要注意那些问题?
  15. 橙单微服务的权限部分之过滤规则
  16. 推荐windows系统10款好用的软件,让你使用体验飞升
  17. 三维设计师梦寐以求的应用软件-Maya快捷键分享
  18. PCL学习笔记(30)——法线估计normal_estimation
  19. 智慧景区整体规划建设运营解决方案
  20. Renamer for Mac 6.0.6批量重命名文件。

热门文章

  1. 高斯拟合原理_数据分析中的插值与拟合(2) —— 拟合
  2. C++中如何读取一个数的位数_初中数学:近似数和平均数知识点总结及练习
  3. 递归法:财务金额漏掉1笔或者几笔(排列组合)
  4. bzoj 4300: 绝世好题
  5. linux删除文件文件夹
  6. [bug解决] Ubantu打不开Typora:typora error while loading shared libraries libXss.so.1
  7. python机器学习库sklearn——DBSCAN密度聚类
  8. python应用系列教程——python使用SocketServer实现网络服务器,socket实现客户端
  9. matlab2c使用c++实现matlab函数系列教程-tanh函数
  10. 频率分布直方图组距如何确定_频率分布有关的概念