Mar*_*ell 71
怎么样:
var most = list.GroupBy(i=>i).OrderByDescending(grp=>grp.Count())
.Select(grp=>grp.Key).First();
Run Code Online (Sandbox Code Playgroud)
或者在查询语法中:
var most = (from i in list
group i by i into grp
orderby grp.Count() descending
select grp.Key).First();
Run Code Online (Sandbox Code Playgroud)
当然,如果你反复使用它,你可以添加一个扩展方法:
public static T MostCommon<T>(this IEnumerable<T> list)
{
return ... // previous code
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用:
var most = list.MostCommon();
Run Code Online (Sandbox Code Playgroud)
不确定 lambda 表达式,但我会
对列表进行排序 [O(n log n)]
扫描列表 [O(n)] 找到最长的游程长度。
再次扫描 [O(n)] 报告每个具有该游程长度的数字。
这是因为出现次数最多的数字可能不止一个。