1

从返回int集合的排序查询中获得第一个空闲位置的最有效方法是什么?

例如:{1,2,3,4,6} | 结果:5

目前我正在使用 foreach 和 counter 来比较排序后的 quety.ToList() 中的当前值,这在 100 000 条记录上大约需要 600 毫秒。

4

3 回答 3

1

除非你多线程,否则一次读取一个是你最快的解决方案,因为这是一个 O(n) 问题。

于 2010-01-17T15:31:52.040 回答
1

我不确定您将如何在 LINQ 中编写它,但我想以这种方式进行二进制搜索可能会更快 - 从中​​间开始,将索引与值进行比较 - 如果它们相等,则继续在右半部分,否则在左半边等

即使您从不是 1 的索引start_index开始,您也可以简单地将该值与增加start_index的索引进行比较。

于 2010-01-17T15:33:10.090 回答
1

为什么使用 ToList()?将其转换为列表会使整个 IEnumerable 想法变得绝对,您可能会在那里失去一些性能。为什么不使用 foreach 遍历 IQueryable 并找到第一个丢失的成员?

于 2010-01-17T15:34:49.303 回答