[高分求算法] 如何计算出集合中最多的重复的数字的重复次数

macenjie 2010-05-17 10:03:26
比如我有一个已排序的集合 List

集合内容如下 {1,1,2,3,4,4,4,5,6,6,7,7,7,7,7,8,8,9}

其中 1 有 2 个, 2 有 1 个, 3 有 1 个, 4 有 3个, 而 7 却有 5 个。

我想写一个函数,针对这个例子,输出就是 5。

有点像 SQL 的 GROUP BY ,然后取下 MAX

请问该函数的算法该如何写?100分相送,谢谢大家啦!

P.S.
该算法的用途是计算某个论坛上所有帖子的最后回复时间的并发数。
比如在最高峰的时间,有 10 个人在 20:30 分回复。那么函数输出为 10
...全文
112 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wuyq11 2010-05-17
static int DistinctCount<T>(IList<T> i)
{
return i.Distinct<T>().Count();
}
遍历Contains
回复
mngzilin 2010-05-17
linq
List<int> list = new List<int>() { 1, 1, 2, 3, 4, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 9 };
var max = (from l in list group l by l into coll select coll.Count()).Max();
回复
HarveyYan 2010-05-17


int[] arr = new int[18] { 1, 1, 2, 3, 4, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 9,};
var i = arr.GroupBy(a => a).Max(b => b.Count());

回复
jianshao810 2010-05-17
做产品不是做作业,做产品要考虑基本的效率。统计是预先做好的,而不是临时查询出来的。
严重同意。。
不过,用 linq 也可以,简单
回复
yalan 2010-05-17
PS:感觉和冒泡排序差不多呵呵,可以先sort这个字符串,然后按逗号分隔字符串,然后比较字符串,例如:zifuchuan[1]=zifuchuan[2]那么相加这两个字符串并且计数,以此类推,知道所有的相等的字符串相加并统计处这些相同值的和,最后输出一个最大数对应的值就行了

如果是ASP我马上就能下下来,可现在刚学c#对代码不熟悉,我认为就是这个思路不会错的,当然如果有更好的算法除外
回复
noway8881 2010-05-17
应该是一句LINQ就出来了,但是俺不会写。
回复
做产品不是做作业,做产品要考虑基本的效率。统计是预先做好的,而不是临时查询出来的。
回复
永生天地 2010-05-17
写循环,没什么好说的
回复
macenjie 2010-05-17
注意,集合是 C# 中的集合类型变量
不是 SQL 数据库,如果是数据库则好办多了,用下 Group By 问题就解决了。
另外,集合是已经根据从小到大排序后的。
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2010-05-17 10:03
社区公告

让您成为最强悍的C#开发者