有多个相关问题,但我正在寻找针对我的案例的解决方案。有一个(通常)14 个整数的数组,每个整数的范围在 1 到 34 之间。如何快速判断特定静态列表中的每个 int 是否在该数组中至少出现一次?
作为参考,我目前正在使用这段代码,它被编写为尽可能接近规范,所以它肯定可以大大改进:
if (array.Count < 13) {
return;
}
var required = new int[] {
0*9 + 1,
0*9 + 9,
1*9 + 1,
1*9 + 9,
2*9 + 1,
2*9 + 9,
3*9 + 1,
3*9 + 2,
3*9 + 3,
3*9 + 4,
3*9 + 5,
3*9 + 6,
3*9 + 7,
};
IsThirteenOrphans = !required.Except (array).Any ();
所需的列表不是动态的,即它在运行时总是相同的。使用 Linq 是可选的,主要方面是性能。
编辑:
- 输入数组未排序。
- 输入值可能会出现多次。
- 输入数组将包含至少 14 个项目,即比所需数组多 1 个。
- 只有 1 个必需的数组,它是静态的。
- required 中的值是不同的。
- 您可能会认为创建直方图的成本很低。
更新:我也对排序输入数组的解决方案感兴趣。