找出数组中所有出现次数大于n/k的元素
1.问题描述:
给定一组数据num,以及一个整数k,找出其中所有出现频度大于n/k的元素
2.分析:
因为要出现频度大于n/k 那么就说明 当前数组中只有k-1个这样的数字,因为 n/k * (k) = n故最多只有k-1个数字的频度大于n/k
3.算法思路:
建立一个hashMap,其中key为要选出的数字,value为他们在数组中出现的频度
- 通过遍历整个数组,如果当前遍历到的数字 已经存入进了hashMap表中,那么就将他的value+1
- 如果当前遍历到的数字没有出现在hashMap中而且 hashMap还没有满,那么就将当前的数字添加到hashMap中;
- 如果当前的遍历到的数字没有出现在hashMap中而且hashMap已经满了,那么就将hashMap中的所有元素的value值都 减一 如果有元素的value值在减一后变为0那么就将当前的该元素移除掉
- 当整个数组全部遍历过一次之后,就应该对当前的hashMap中存的数进行检验。检查他们出现的频度
- 最后检查完所有的数字之后,将真正出现频度大于n/k的数加入到res集合中返回
4.代码 :
// 大于n/k的频度的数 最多只有k-1个public List<Integer> findOverKTimes(int[] num, int k) {if (num == null || num.length < k) {return null;}
// 用哈希表来记录最多的k-1个数 并且在arr数组中出现的次数HashMap<Integer, Integer> hashMap = new HashMap<>();
// 遍历整个数组for (int i = 0; i < num.length; i++) {
// 当遍历到arr[i]的时候 已经在hashMap中了if (hashMap.containsKey(num[i])) {hashMap.put(num[i], hashMap.getOrDefault(num[i], 0) + 1);}
// 不在hashMap中,并且当前的hashMap还没有满(没有找到k-1个数)else if (hashMap.size() < k - 1) {hashMap.put(num[i], 1);}
// 当前hashMap已经满了说明已经发现了k个不同的数,那么就将hashMap中的所有数的出现次数全部-1 并且当前的数字也不要
// 如果当前的hashMap中有元素的出现次数在 - 1后变为0那么hashMap重新变为不满的状态else {allDeleteOne(hashMap);}}List<Integer> res = new ArrayList<>();
// 在遍历完整个数组后需要进行验证,判断当前的数组是否真的出现次数大于n/k次HashMap<Integer, Integer> realRes = getRealRes(num, hashMap);for(int key : realRes.keySet()){Integer value = realRes.get(key);
// 如果得到的验证之后的出现频率是大于 n/k的那么就将当前的数字添加到res结果集中if(value > num.length/k){res.add(key);}}return res;}// hashMap中的所有元素的出现次数全部都减一public void allDeleteOne(HashMap<Integer, Integer> hashMap) {Set<Integer> keys = hashMap.keySet();for (int key : keys) {int value = hashMap.get(key);
// 如果出现的次数为1那么就将当前的元素移除 让hashMap重新变回不满的状态if (value == 1) {hashMap.remove(key);} else if (value > 1) {hashMap.put(key, value - 1);}}}// 对得出的结果进行验证public HashMap<Integer,Integer> getRealRes(int[] num, HashMap<Integer, Integer> hashMap) {
// realRes中存的是 之前演算出来的数组,和在数组中真正出现的次数HashMap<Integer,Integer> realRes = new HashMap<>();for (int key : hashMap.keySet()) {int count = 0;
// 遍历整个数组 只要当前的数是hashMap得到的当前的元素 那么count++for(int i =0;i<num.length;i++){if(num[i] == key) {count++;}}realRes.put(key,count);}return realRes;}
找出数组中所有出现次数大于n/k的元素相关推荐
- 找出数组中只出现1次的两个元素
通过位运算可以得到只出现1次的唯一元素,但是如果有两个元素出现1次,则需要更进一步. 对整个数组依次进行异或运算后,得到的是两个出现一次元素的异或,之后将这两个元素的最后面是1的位记录下来,并以此为标 ...
- java数组出现次数最多的数_找出数组中出现次数最多的那个数——主元素问题...
方法一:以空间换时间,可以定义一个计数数组int count[101],用来对数组中数字出现的次数进行计数(只能针对数组中数字的范围1~100),count数组中最大的元素对应的下标,即为出现次数最多 ...
- 找出数组中出现次数超过一半的数
算法--找出数组中出现次数超过一半的数 每当我看到经典的算法题,就怀念高中,感觉很多算法题就是高中的题目,谁叫哥只读了个专科,高数基本相当没学. 有空要看看高数啊,想当年数学那是相 ...
- c语言找出一个数组中出现次数最多的那个元素,c语言找出数组中出现次数最多地那个元素...
matlab中如何找出不同维度矩阵出现次数最多的数组并记录其个数 首先是胞矩阵中的序列问题,不妨假设AA{1}是一个多行两列的数据,AA{2}同例.程序如下clcclearallAA{1}=[12;2 ...
- 利用HashMap找出数组中出现次数最多的元素及其次数
我在牛客网上刷题时遇到了这道题目,因为初学Java不久,对Java的应用还不熟悉,刚开始用C语言做没做出来(我太菜了...),接着百度发现竟然可以用HashMap做,仔细一想发现这真是一个好办法(为什 ...
- 给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。
笔者初涉<算法设计与分析>这门专业课,在做一些算法设计题的过程中遇到一些小感悟,特此记录和大家分享. 下面直接给出算法题目: 给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高 ...
- 【菜鸡新手 - 剑指offer 03】[2021/1/17一刷] 找出数组中重复的数字 -三种解法|| 物归原主,测试碰撞法 || hash表测试碰撞法 || 排序+遍历法 ||python
文章目录 题目解读 A. 书籍推荐解法:我起名为" 物归原主,测试碰撞"法 B. 基础尝试1:hash表 + 碰撞测试 (效果还行) C. 基础尝试2:排序+遍历 (效果差) C. ...
- 9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...
/** * 功能:给定一个排序后的数组.包括n个整数.但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 能够假定数组元素原先是按从小到大的顺序排列的. */ /*** 思路:数组被 ...
- 微策略2011校园招聘笔试题(找出数组中两个只出现一次的数字)
1.8*8的棋盘上面放着64个不同价值的礼物,每个小的棋盘上面放置一个礼物(礼物的价值大于0),一个人初始位置在棋盘的左上角,每次他只能向下或向右移动一步,并拿走对应棋盘上的礼物,结束位置在棋盘的右下 ...
最新文章
- 深度学习(四)卷积神经网络Lenet-5实现
- Hibernate中的merge使用详情解说
- centeros7安装mysql - 风中追风_lonely - 博客园
- 读取串口 :javax.comm 2.0 windows下Eclipse的配置
- 通过xshell在linux上安装mysql5.7(终极版)
- API的过去,现在与未来
- express给html设置缓存,webpack+express实现文件精确缓存的示例代码
- 对代码更有信心--单元测试工具Mockito简单介绍
- goaccess分析nginx日志
- 操作系统-UNIX三级索引技术
- 使用 URL 读取网络资源
- 1853: [Scoi2010]幸运数字[容斥原理]
- 男同胞要一定要看——酒桌上用来劝酒的话
- AI实战:目标检测模型应用之生活垃圾图片分类
- 2021年华为杯数学建模比赛——二分类与回归问题(1)
- Java趣味编程(一)
- 如何用svg画一个骚气的名字
- if-else if语句与多if语句
- 单正态总体的样本均值和样本方差的分布
- java jxl 筛选_JAVA 用 JXL导出excel怎么给标题设置自动筛选功能,求代码。
热门文章
- 新鲜!宁盾dKey手机动态口令牌简介
- 深划痕需要大面积补漆吗_什么程度的划痕才需要做补漆?小心亏大了!
- 微信实时监测室内环境
- “终极PK”终告落幕,DEMO GOD花落谁家?
- D. Felicity's Big Secret Revealed dp
- MRO采购对酒店业务的重要性
- OpenCV+Visual Studio配置及测试 (没有做不成的事)
- hutool导出excel大数据_Hutool excel导出并合并单元格
- 睡眠实验记录:探索自己的最佳睡眠时长及方式,提高睡眠效率
- 想学习CAD制图?对于初学CAD应该注意什么?