如何求出数组中出现次数最多的数字(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#实现)的主要内容,如果未能解决你的问题,请参考以下文章