比如我有一个已排序的集合 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

解决方案 »

  1.   

    注意,集合是 C# 中的集合类型变量
    不是 SQL 数据库,如果是数据库则好办多了,用下 Group By 问题就解决了。
    另外,集合是已经根据从小到大排序后的。
      

  2.   

    http://topic.csdn.net/u/20100426/02/7c903e18-5dd1-4f2c-8918-add42fbe7152.html
      

  3.   

    应该是一句LINQ就出来了,但是俺不会写。
      

  4.   

    PS:感觉和冒泡排序差不多呵呵,可以先sort这个字符串,然后按逗号分隔字符串,然后比较字符串,例如:zifuchuan[1]=zifuchuan[2]那么相加这两个字符串并且计数,以此类推,知道所有的相等的字符串相加并统计处这些相同值的和,最后输出一个最大数对应的值就行了如果是ASP我马上就能下下来,可现在刚学c#对代码不熟悉,我认为就是这个思路不会错的,当然如果有更好的算法除外
      

  5.   

    做产品不是做作业,做产品要考虑基本的效率。统计是预先做好的,而不是临时查询出来的。
    严重同意。。
    不过,用 linq 也可以,简单
      

  6.   

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

  7.   

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

  8.   

    static int DistinctCount<T>(IList<T> i)
      {
        return i.Distinct<T>().Count();
      }
    遍历Contains