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());

最后结果如下

参考技术A import java.util.Collection;
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#中找出一个数组中出现次数最多的元素,求各种方法,要详细的代码

Java,输入一字符串,统计连续出现最多的字符,以及出现次数。 【编程】

数组中有一个数字出现次数超过数组长度一半,找出这个数字(用C语言解决)。要求时间复杂度尽量小。