|
|
1
6
显然,Linq不会提供 最优的 这里的解决方案,尽管我会将您当前的LINQ解决方案改进为:
对于您提到的特定情况(0-31),这里有一个更快的、基于阵列的解决方案。当可能的数字范围很大时(在本例中使用哈希解决方案),它的伸缩性不是很好。
编辑:修复了乔恩·斯基特指出的错误。我还应该指出他的算法更聪明 可能 更快。 |
|
|
2
10
好吧,考虑到你的具体要求,我们可以更聪明一点。像这样:
基本上,这会跟踪你还有多少未配对的价值观,如果发现有三种价值观的话,它会有一个“早期发现”。 (我不知道这是否会比ANI的递增方法快或慢,然后检查不匹配的对。) |
|
|
3
0
我将创建一个32个整数元素的数组,初始化为零。我们叫它“比利”。 对于输入数组的每个元素,我将billy[element]增加1。 最后,检查billy是否只包含0或2。 |
|
|
4
0
几乎可以肯定,当您只有14个ish对和32个ish可能的值时,会造成过度杀戮,但在一般情况下,您可以这样做:
|
|
|
5
0
如果项的范围是0-31,则可以在uint32中存储32个一位标志。我建议取每个项目并计算mask=(1 shl item),然后看看如果尝试“或”ing、“xor”ing或添加mask值会发生什么。查看有效和无效案例的结果。为了避免溢出,您可能需要使用uint64进行添加(因为如果存在两个31秒、四个30秒或八个29秒,uint32可能溢出)。 |
|
6
0
我想(从未测量过速度)这个代码截图可以给你一个新的观点:
您可以在变量“两次”中得到双倍的值; 当然,它只适用于小于32的值; |