在一个数组或字符串中找到出现频率最高的那个元素的方法
来源:互联网 发布:彗星dns优化器 编辑:程序博客网 时间:2024/04/28 05:30
思路:
1,将数组按大小排序。
2,相邻两个元素比较是否相等,并记录相等次数得到这个元素出现的频率
3,在比较过程中,不断将最大次数和其对应的元素赋值给一个变量,最后得到出现频率最高的元素
4,通过集合收集并再次比较的方法处理多个元素出现频率同时最高的情况
我们以双色球蓝球的玩法为例,实现的代码如下:
int[] blueBalls = new int[n];
/* * 随机出蓝球 */int blueBallNum = (int)(Math.random()*16 + 1); //随机一个蓝球号码String blueBallString = "";if (blueBallNum < 10) { //将蓝球int类型转化为String类型blueBallString = "0" + blueBallNum;}else{blueBallString = String.valueOf(blueBallNum);}System.out.println("蓝球:" +blueBallString); //输出蓝球号码blueBalls[i] = blueBallNum;}//循环100次得到一个篮球号码的集合//得到蓝球中出现最多的那个号及出现次数for (int i = 0; i < blueBalls.length; i++) {//将收集到的蓝球元素进行大小排序for (int j = i+1; j < blueBalls.length; j++) {if (blueBalls[i] > blueBalls[j]) {blueBalls[i] ^= blueBalls[j];blueBalls[j] ^= blueBalls[i];blueBalls[i] ^= blueBalls[j];}}}for (int i = 0; i < blueBalls.length; i++) {//展示数组中的内容System.out.print(blueBalls[i] + " ");}System.out.println();int count = 1;int maxCount = 1;int maxNum = blueBalls[0];ArrayList<ReaptBall> list = new ArrayList<ReaptBall>();//建立一个集合来收集可能是最大频率的元素for (int i = 0; i < blueBalls.length - 1; i++) {if (blueBalls[i] == blueBalls[i + 1]) {//进行相邻两个数的比较,并记录出现次数count ++;}if (blueBalls[i] != blueBalls[i + 1] || i + 1 == blueBalls.length-1) {//当跳过该数字或到最后时,将最大次数和其对应的号码记录下来if (count > maxCount) {maxCount = count;maxNum = blueBalls[i];}else if(count == maxCount){//将可能是最大的数字当作一个对象装到集合里list.add(new ReaptBall(blueBalls[i], count));}count = 1;}}for(ReaptBall reaptBall : list){//遍历集合,比较对象的count数和最大count数之间的关系,只有小于或等于最大数两种情况,if (reaptBall.getCount() == maxCount) {//等于时输出相同count数的对象,System.out.println("出现次数最多的蓝球是:" + reaptBall.getBallNum() + "出现的次数是:" + reaptBall.getCount());}}System.out.println("出现次数最多的蓝球是:" + maxNum + "出现的次数是:" + maxCount);//小于时输出最大的count数}同时建一个辅助类将 球出现的频率和对应球的号码合成一个对象,放到集合里面
public class ReaptBall {private int ballNum;private int count;public int getBallNum() {return ballNum;}public void setBallNum(int ballNum) {this.ballNum = ballNum;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}public ReaptBall(int ballNum,int count){this.ballNum = ballNum;this.count = count;}}
通过以上方法可以完成在数组中出现频率最高的的那个元素(或那几个元素)。亲测有效,有更好的思路可以一起交流。
字符串可以先转化为char类型的数组,思路同上
0 0
- 在一个数组或字符串中找到出现频率最高的那个元素的方法
- 找出一个字符串中出现频率最高的字符
- 求一个字符串中出现频率最高的字符
- 数组中除一个元素外其他所有元素出现二或三次,找到只出现一次的元素
- 有序数组找到出现次数最高的元素和次数
- 在给定字符串里查找出现频率最高的字符
- Javascript面试题-找出数组中频率最高元素的多种方法
- c++求数组中出现频率最高的数
- 个函数实现求一个字符串中出现频率最高的字符
- 重复子串问题(三):输出一个字符串中出现频率最高的子串
- 找出字符串中出现频率最高的字符
- 48.找出字符串中出现频率最高的字母
- 统计字符串中出现频率最高的字符
- 统计字符串中出现频率最高的字符
- 给定一个字符串如何判断该字符串中某一字符出现的频率并找出出现频率最高的字符和频率
- 给定整数数组,除了一个元素之外,每个元素都出现三次。 找到那个只出现一次的数
- 给定整数数组,除了一个元素之外,每个元素都会出现两次。 找到那个只出现一次的
- 每天一道LeetCode-----给定大小为n+1的数组,元素大小在[1 : n]之间,只有一个元素会重复出现多次,找到重复的那个
- 『NYIST』第八届河南省ACM竞赛训练赛[正式赛一]-CodeForces 237C,素数打表,二分查找
- 多表查询,左外联结,唯一条件,有的表数据为null
- tcp粘包分析
- ECharts markPoint显示问题
- 第四周项目:猜数
- 在一个数组或字符串中找到出现频率最高的那个元素的方法
- activity页面跳转传递参数的几种方法
- Session、Cookie
- GridView 使用方法总结
- LeetCode--evaluate-reverse-polish-notation
- TCP中的多线程
- jQuery选择器及jQuery事件
- catch that cow
- Java中异常的基本应用(一)