按顺序检查缺失的编号

Jon*_*Jon 46 c# linq algorithm

我有一个List<int>例如1,2,4,7,9.

我的范围从0到10.

有没有办法确定该序列中缺少的数字?

我认为LINQ可能提供一个选项,但我看不到一个

在现实世界中,我的列表可以包含100,000个项目,因此性能是关键

Dar*_*rov 114

var list = new List<int>(new[] { 1, 2, 4, 7, 9 });
var result = Enumerable.Range(0, 10).Except(list);
Run Code Online (Sandbox Code Playgroud)

  • 绝对简单和干净 - 但如果范围很大,速度问题 (2认同)

And*_*tan 11

将要检查的范围转换为HashSet:

public IEnumerable<int> FindMissing(IEnumerable<int> values)
{
  HashSet<int> myRange = new HashSet<int>(Enumerable.Range(0,10));
  myRange.ExceptWith(values);
  return myRange;
}
Run Code Online (Sandbox Code Playgroud)

将返回不在的值values.