java数组出现次数最多的数_找出数组中出现次数最多的那个数——主元素问题...
方法一:以空间换时间,可以定义一个计数数组int count[101],用来对数组中数字出现的次数进行计数(只能针对数组中数字的范围1~100),count数组中最大的元素对应的下标,即为出现次数最多的那个数。Java代码如下:
public classSearchMuch {public static void candidate (int[] array) //找出数组中出现次数最多的那个数
{int[] count = new int[101]; //计数数组,每个元素的默认值为0
for(int i = 0; i < array.length; i++)
{
count[array[i]]++; //对应的计数值加1
}int maxCount = count[0];int maxNumber = 0;for(int i = 1; i < 100; i++) //找出最多出现的次数
{if(count[i] >maxCount)
maxCount=count[i];
}for(int i = 0; i < 100; i++) //找出出现最多次的那个数字
{if(count[i] ==maxCount)
maxNumber=i;
}
System.out.println("出现次数最多的数字为:" +maxNumber);
System.out.println("该数字一共出现" + maxCount + "次");
}
}
上例是一种典型的空间换时间算法(所需数组空间的大小完全取决于数组中数字的大小)。一般情况下,除非内存空间足够大且数组中的数不是很大,否则一般不采用这种方法。
方法二:使用HashMap,每个Entry的key存放数组中的数字,value存放该数字出现的次数,首先遍历数组元素构造HashMap,然后遍历每个Entry,找出最大value对应的key,即是出现次数最多的那个数。此算法的时间复杂度为O(n)。Java代码如下:
public classSearchMuch {public static void candidate (int[] array) //找出数组中出现次数最多的那个数
{//map的key存放数组中的数字,value存放该数字出现的次数
HashMap map = new HashMap();for(int i = 0; i < array.length; i++)
{if(map.containsKey(array[i]))
{int formerValue =map.get(array[i]);
map.put(array[i], formerValue+ 1); //该数字出现的次数加1
}else{
map.put(array[i],1); //该数字第一次出现
}
}
Collection count =map.values();//找出map的value中最大值,也就是数组中出现最多的数字所出现的次数
int maxCount =Collections.max(count);int maxNumber = 0;for(Map.Entryentry : map.entrySet())
{//得到value为maxCount的key,也就是数组中出现次数最多的数字
if(entry.getValue() ==maxCount)
{
maxNumber=entry.getKey();
}
}
System.out.println("出现次数最多的数字为:" +maxNumber);
System.out.println("该数字一共出现" + maxCount + "次");
}
}
方法三(针对出现次数超过一半的情况):可以用数对对消的思路假设数组如下{1, ?, 1, 1, 1, ?, 1, ?, ?},数组中?代表其他任意不为1的数字,显然,出现次数最多的数为1,且超过了一半,我们可以把1与?匹配(当然,我们事先并不知道1就是出现次数最多的那个数,这里只是讲可行的思路),一次匹配出一个<1,?>,最后剩余没得到匹配的数还是1,就是超过一半的次数,代码有时间再写。
方法四(针对出现次数超过一半的情况):利用快速排序的分割算法(partition)。任意选取一个基准pivot,调用partition()把数组分成两个部分,小于pivot的部分和大于pivot的部分,而pivot就位于它们之间,把返回的pivot的索引与数组的中位索引middle进行比较,只要二者不相等就更新边界:
while(pivot_index !=middle)
{if (pivot_index
left= pivot_index + 1;elseright= pivot_index - 1;
pivot_index=partition(A, left, right);
}
最后A[middle]必定就是数组A中出现次数超过一半的那个数
方法五(针对出现次数超过一半的情况):蒙特卡罗算法
java数组出现次数最多的数_找出数组中出现次数最多的那个数——主元素问题...相关推荐
- Python找出列表中出现次数最多的元素三种方式
通过三种方式给大家介绍,具体详情如下所示: 方式一: 原理:创建一个新的空字典,用循环的方式来获取列表中的每一个元素,判断获取的元素是否存在字典中的key,如果不存在的话,将元素作为key,值为列表中 ...
- python出现的次数最多的元素_Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算...
本文实例讲述了Python找出序列中出现次数最多的元素.分享给大家供大家参考,具体如下: 问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是 ...
- 9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...
/** * 功能:给定一个排序后的数组.包括n个整数.但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 能够假定数组元素原先是按从小到大的顺序排列的. */ /*** 思路:数组被 ...
- 给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...
2019独角兽企业重金招聘Python工程师标准>>> /** * 功能:给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 可以假定 ...
- 如何快速找出找出两个数组中的_找出JavaScript中两个数组之间的差异
LeetCode今天面临的挑战是在数组中查找所有消失的数字. 蛮力 我们的输入包括一个缺少数字的实际数组.我们想将该数组与相同长度的数组进行比较,其中没有遗漏的数字.所以如果给定的话[4,3,2,7, ...
- 121. 买卖股票的最佳时机_面试题63. 股票的最大利润_[找出数组中一个元素和它后面最大的元素的差值]
描述 Say you have an array for which the ith element is the price of a given stock on day i. If you we ...
- 1.给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的 任意个数之和 等于 target,并打印出所有结果的索引,索引不能重复。
/*做的一家公司笔试题,两数之和解决,N数之和想了半天,最终参考了别人的思路,收货不错参考地址:https://blog.csdn.net/dengz_j/article/details/114540 ...
- 查找python矩阵中最大元素_找出矩阵中最大的元素
当提示输入矩阵中的行数,然后提示输入这些行的元素时,我需要找到矩阵中最大的元素并返回其位置(行和列).在 例如,如果输入2行,如下所示: [1 3 7] [4 8 1] 最大元素的位置将是(1,1), ...
- python步骤解析 给定一个整数数组和目标值_给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 例如给定nums = [2,7,11,15],target = 9...
python解决方案 nums = [1,2,3,4,5,6] #假如这是给定的数组 target = 9 #假如这是给定的目标值 num_list = [] #用来装结果的容器 def run(nu ...
最新文章
- (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT
- 为什么数据库连接池不采用IO多路复用?
- PHP框架中的日志系统
- DS博客作业05--树
- SicilyRails
- 内存中OLTP(Hekaton)的排序警告
- git push github SSL报错处理
- Java数据库连接(JDBC)之一:JDBC详细连接过程
- python编写ftp客户端_用Python写FTP客户端程序
- 算法 - 排序算法 (算法学习)(冒泡、选择、插入、希尔、快排、归并)
- CSS常用的元素居中方法
- 浅层学习与深层学习_深层副本与浅层副本-以及如何在Swift中使用它们
- php mysql 单例模式_PHP基于单例模式实现的mysql类
- centos7.6(腾讯云)开放端口及配置腾讯云安全组
- MyBatis的常见面试题
- 如何做一个基于JAVA的新闻管理系统毕业设计毕设作品(springboot框架)
- mysql处理emoji表情_Mysql处理emoji表情
- 【小白必读】机器学习入门须知
- JAVA垃圾回收-可达性分析算法
- 中缀转后缀表达式并计算
热门文章
- CALMS:多语言摘要中的信息抽取与共享 | ​ACL 2021 Findings
- AI最佳论文都在这里了!(非常全,快领!)
- CNN 分类古代陶器,表现超过考古专家,解决“考古学中的肮脏秘密”
- 十九种损失函数,你能认识几个?
- 分布式事务篇——第二章:分布式事务解决之2PC剖析
- TCP 客户端程序开发
- Pytorch张量tensor的使用
- Redis中字符串string数据类型(保存(设置键值、过期时间、设置多个键值、追加值)、获取(获取单一键值、获取多个键值))
- Python爬虫获取文章的标题及你的博客的阅读量,评论量。所有数据写入本地记事本。最后输出你的总阅读量!
- U平方Net:深入使用嵌套的U型结构进行显著目标检测