java如何找出一个int数组中出现次数最多
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何找出一个int数组中出现次数最多相关的知识,希望对你有一定的参考价值。
其实这个问题,涉及到两个过程
首先是统计数组中数字出现的次数,应该要有类似“数字 - 出现次数”这种结果出现,其实就是Map结构的key和value
然后就是找出出现次数最大的一个,并返回对应的数字即可
针对以上两个过程,推荐采用Java8的流(Stream)来处理,代码比较简单易懂,因此下面的示例代码,请在JDK8的环境下运行
int[] arr = 1, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5;// 过程1 Collectors.groupingBy代表是分类,按照本身Function.identity()进行分类,那相同数字就会放在一起,Collectors.counting是统计相同数字的个数
Map<Integer, Long> map = IntStream.of(arr).boxed().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println("数字出现次数统计(数字=次数):" + map);
// 过程2 max方法是根据比较器(按照map的value进行排序)找出最大值
Optional<Integer> maxOptional = map.entrySet().stream().max(Comparator.comparing(Map.Entry::getValue)).map(Map.Entry::getKey);
System.out.println("出现次数最多的数字:" + maxOptional.get());
最后结果如下
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Mytest
/**
* @param args
*/
public static void main(String[] args)
int[] array = 2,3,1,2,2,5,6,8,2,3,2,4,2;
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < array.length; i++)
if(map.containsKey(array[i]))
int temp = map.get(array[i]);
map.put(array[i],temp+1);
else
map.put(array[i],1);
Collection<Integer> count = map.values();
int maxCount = Collections.max(count);
int maxnum = 0;
for (Map.Entry<Integer,Integer> entry:map.entrySet())
if (maxCount==entry.getValue())
maxnum = entry.getKey();
System.out.println("出现次数最多的数字为"+maxnum);
System.out.println("改次数一共出现了"+maxCount+"次");
如何求出数组中出现次数最多的数字(C#实现)
/// <summary>/// 求出数组中出现次数最多的数字
/// </summary>
public class MaxCounter
/// <summary>
/// numbers:要统计的数组,count:统计最多资料
/// 返回出现次数最多的数字
/// </summary>
public int GetMaxCounts(int[] numbers, out int count)
Hashtable _hash = new Hashtable();
int max = 0; //出现次数
int num = 0; //数字
foreach (int i in numbers)
if (_hash.ContainsKey(i))
int v = (int)_hash[i];
_hash[i] = v+1;
else
_hash.Add(i, 1);
int tmp = (int)_hash[i];
if (tmp > max)
max = tmp;
num = i;
count = (int)_hash[num];//统计次数
return num; //返回出现最多次数的数
================
调试:
int[] test = new int[] 1, 1, 2, 2, 2, 2, 2, 3, 4, 55, 66 ;
int count = 0;
int max = new MaxCounter().GetMaxCounts(test, out count); 参考技术A 已经测试过的:
int[] A = new int[9] 1, 5, 2, 1, 2, 6, 5, 2, 5 ;
int[] B = new int[A.Length]; //记录每个数字重复的次数
int[] max = new int[A.Length]; //记录出现次数最大的数,如果有多个,都列出来(比如2和5都出现了最多次--3次)
//将每个数字出现的次数计入B[]
for (int i = 0; i < A.Length; i++)
int m = 0;
for (int j = 0; j < A.Length; j++)
if (i != j)
if (A[i] == A[j])
m++;
B[i] = m;
//获取出现最多的次数
int n = 0;
for (int k = 0; k < B.Length - 1; k++)
if (B[k] >= B[k + 1])
B[k + 1] = B[k];
n = B[k + 1];
//找出最大数存入max[]
for (int i = 0; i < A.Length; i++)
int m = 0;
for (int j = 0; j < A.Length; j++)
if (i != j)
if (A[i] == A[j])
if (i < j)
m++;
if (m == n)
max[i] = A[i];
//将结果以弹出窗口的形式逐个输出
ClientScript.RegisterStartupScript(GetType(), "" + i, "<script>alert('" + max[i] + "')</script>");
参考技术B 代码在txt文档中编写,有错误处自行修改下。
int num = new int[]1,2,3,1;
int num2 = new int[num.length];
int b = 0;
for(int i = 0; i < num.length;i++)
int a = 0;
for(int j = 0; j < num.length;j++)
if(num[i] == num[j])
a++;
num2[i] = a;
for(int i = 0; i < num.length;i++)
for(int j = 0; j < num.length;j++)
if(num[i] < num[j])
c = num[j];
messageboxs.show("数组中最大的是" + c)本回答被提问者采纳 参考技术C int num = new int[]1,2,3,1;
int num2 = new int[num.length];
int b = 0;
for(int i = 0; i < num.length;i++)
int a = 0;
for(int j = 0; j < num.length;j++)
if(num[i] == num[j])
a++;
num2[i] = a;
for(int i = 0; i < num2.length;i++)
for(int j = 0; j < num2.length;j++)
if(num2[i] < num2[j])
c = num2[j];
messageboxs.show("数组中最大的是" + c)
就是两个嵌套for循环么 参考技术D 这种题目用linq更好些,虽然我还没有开始接触linq,但是我按着示例给你写了一个,不要忘记引入using System.Linq:
int maxCountNum=(
from num in new[] 1, 12, 12, 21, 12, 4, 4, 5
group num by num into g
orderby g.Count() descending
select g.Key
)
.First();
Console.WriteLine(maxCountNum);
以上是关于java如何找出一个int数组中出现次数最多的主要内容,如果未能解决你的问题,请参考以下文章
在c#中找出一个数组中出现次数最多的元素,求各种方法,要详细的代码