方法一:以空间换时间,可以定义一个计数数组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数组出现次数最多的数_找出数组中出现次数最多的那个数——主元素问题...相关推荐

  1. Python找出列表中出现次数最多的元素三种方式

    通过三种方式给大家介绍,具体详情如下所示: 方式一: 原理:创建一个新的空字典,用循环的方式来获取列表中的每一个元素,判断获取的元素是否存在字典中的key,如果不存在的话,将元素作为key,值为列表中 ...

  2. python出现的次数最多的元素_Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算...

    本文实例讲述了Python找出序列中出现次数最多的元素.分享给大家供大家参考,具体如下: 问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是 ...

  3. 9.11排序与查找(三)——给定一个排序后的数组,包括n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...

    /**  * 功能:给定一个排序后的数组.包括n个整数.但这个数组已被旋转过多次,次数不详.找出数组中的某个元素.  * 能够假定数组元素原先是按从小到大的顺序排列的.  */ /*** 思路:数组被 ...

  4. 给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,找出数组中的某个元素...

    2019独角兽企业重金招聘Python工程师标准>>> /** * 功能:给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 可以假定 ...

  5. 如何快速找出找出两个数组中的_找出JavaScript中两个数组之间的差异

    LeetCode今天面临的挑战是在数组中查找所有消失的数字. 蛮力 我们的输入包括一个缺少数字的实际数组.我们想将该数组与相同长度的数组进行比较,其中没有遗漏的数字.所以如果给定的话[4,3,2,7, ...

  6. 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 ...

  7. 1.给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的 任意个数之和 等于 target,并打印出所有结果的索引,索引不能重复。

    /*做的一家公司笔试题,两数之和解决,N数之和想了半天,最终参考了别人的思路,收货不错参考地址:https://blog.csdn.net/dengz_j/article/details/114540 ...

  8. 查找python矩阵中最大元素_找出矩阵中最大的元素

    当提示输入矩阵中的行数,然后提示输入这些行的元素时,我需要找到矩阵中最大的元素并返回其位置(行和列).在 例如,如果输入2行,如下所示: [1 3 7] [4 8 1] 最大元素的位置将是(1,1), ...

  9. python步骤解析 给定一个整数数组和目标值_给定一个整数数组和一个目标值,找出数组中和为目标值的两个数 例如给定nums = [2,7,11,15],target = 9...

    python解决方案 nums = [1,2,3,4,5,6] #假如这是给定的数组 target = 9 #假如这是给定的目标值 num_list = [] #用来装结果的容器 def run(nu ...

最新文章

  1. (2016北京集训十)【xsy1529】小Q与进位制 - 分治FFT
  2. 为什么数据库连接池不采用IO多路复用?
  3. PHP框架中的日志系统
  4. DS博客作业05--树
  5. SicilyRails
  6. 内存中OLTP(Hekaton)的排序警告
  7. git push github SSL报错处理
  8. Java数据库连接(JDBC)之一:JDBC详细连接过程
  9. python编写ftp客户端_用Python写FTP客户端程序
  10. 算法 - 排序算法 (算法学习)(冒泡、选择、插入、希尔、快排、归并)
  11. CSS常用的元素居中方法
  12. 浅层学习与深层学习_深层副本与浅层副本-以及如何在Swift中使用它们
  13. php mysql 单例模式_PHP基于单例模式实现的mysql类
  14. centos7.6(腾讯云)开放端口及配置腾讯云安全组
  15. MyBatis的常见面试题
  16. 如何做一个基于JAVA的新闻管理系统毕业设计毕设作品(springboot框架)
  17. mysql处理emoji表情_Mysql处理emoji表情
  18. 【小白必读】机器学习入门须知
  19. JAVA垃圾回收-可达性分析算法
  20. 中缀转后缀表达式并计算

热门文章

  1. CALMS:多语言摘要中的信息抽取与共享 | ​ACL 2021 Findings
  2. AI最佳论文都在这里了!(非常全,快领!)
  3. CNN 分类古代陶器,表现超过考古专家,解决“考古学中的肮脏秘密”
  4. 十九种损失函数,你能认识几个?
  5. 分布式事务篇——第二章:分布式事务解决之2PC剖析
  6. TCP 客户端程序开发
  7. Pytorch张量tensor的使用
  8. Redis中字符串string数据类型(保存(设置键值、过期时间、设置多个键值、追加值)、获取(获取单一键值、获取多个键值))
  9. Python爬虫获取文章的标题及你的博客的阅读量,评论量。所有数据写入本地记事本。最后输出你的总阅读量!
  10. U平方Net:深入使用嵌套的U型结构进行显著目标检测