如何求出数组中出现次数最多的数字(C#实现)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何求出数组中出现次数最多的数字(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);

如何获取数组中出现次数最多的字符串?

参考技术A 像选举唱票时候画正字一样,最后比较谁多谁少一样。

假设源数组 Array1

1.新建 二维数组 Array2(1,2) 储存(字符串,数量)
2.轮询 Array1,得到 Array1(i) 对应的字符串 c
3.嵌套轮询 Array2,若找到对应 c,对应 数量 +1,若找不到,重定义(扩大)Array2,对应 数量 1。
4.最后比较出Array2数量最多的字符串。

以上是关于如何求出数组中出现次数最多的数字(C#实现)的主要内容,如果未能解决你的问题,请参考以下文章

数组中求出现两次的元素

如何获取数组中出现次数最多的字符串?

JAVA题,利用数组求出用户输入的字符串中出现次数最多的字符串

从数组中找到元素出现次数最多的元素

excel中 一组数中选出出现次数最多的数字

c语言数组问题