【发布时间】:2011-05-10 07:16:54
【问题描述】:
有多个相关问题,但我正在寻找针对我的案例的解决方案。有一个(通常)14 个整数的数组。如何快速判断每个 int 是否恰好出现两次(即有 7 对)?取值范围为 1 到 35。这里的主要方面是性能。
作为参考,这是我目前的解决方案。它被编写为尽可能接近规范并且没有考虑性能,所以我敢肯定它可以大大改进:
var pairs = Array
.GroupBy (x => x)
.Where (x => x.Count () == 2)
.Select (x => x.ToList ())
.ToList ();
IsSevenPairs = pairs.Count == 7;
使用 Linq 是可选的。我不在乎如何,只要它快:)
编辑: 有一种特殊情况,即 int 出现 2n 次且 n > 1。在这种情况下,检查应该 失败,即应该有 7 个不同的对.
编辑:结果 我用微小的修改测试了 Ani 和 Jon 的解决方案,发现在目标应用程序中的多个基准测试运行期间,Ani 在我的机器上的吞吐量大约是 Jon 的两倍(Win7-64 上的一些 Core 2 Duo)。生成整数数组所需的时间与相应检查的时间差不多,所以我对结果很满意。谢谢大家!
【问题讨论】:
-
数字数组排序好了吗?您应该告诉我们数组是否有什么特别之处,这可能有助于改进解决方案。
-
我目前正在分析答案以确定谁将获得 +15。
-
@Danny 数组未排序。除了我到目前为止所说的之外,我想不出任何有用的东西。
标签: c# .net list duplicates mahjong