从返回int集合的排序查询中获得第一个空闲位置的最有效方法是什么?
例如:{1,2,3,4,6} | 结果:5
目前我正在使用 foreach 和 counter 来比较排序后的 quety.ToList() 中的当前值,这在 100 000 条记录上大约需要 600 毫秒。
从返回int集合的排序查询中获得第一个空闲位置的最有效方法是什么?
例如:{1,2,3,4,6} | 结果:5
目前我正在使用 foreach 和 counter 来比较排序后的 quety.ToList() 中的当前值,这在 100 000 条记录上大约需要 600 毫秒。
除非你多线程,否则一次读取一个是你最快的解决方案,因为这是一个 O(n) 问题。
我不确定您将如何在 LINQ 中编写它,但我想以这种方式进行二进制搜索可能会更快 - 从中间开始,将索引与值进行比较 - 如果它们相等,则继续在右半部分,否则在左半边等
即使您从不是 1 的索引start_index开始,您也可以简单地将该值与增加start_index的索引进行比较。
为什么使用 ToList()?将其转换为列表会使整个 IEnumerable 想法变得绝对,您可能会在那里失去一些性能。为什么不使用 foreach 遍历 IQueryable 并找到第一个丢失的成员?