我需要在10分钟内找到丢失的航段,我想知道采取的最佳路线。
可以说我有三个时间段。
2:30-3:43分钟。
4:25-4:59分钟。
7:21-9:55分钟。
使用C#,我有整整10:20分钟的时间段。当我已经有3个以上的细分时,我需要找到缺失的细分。
因此,我需要使用C#计算的段如下
0:00-2:29分钟。
3:44-4:24分钟。
5:00-7:20分钟。
9:56-10:20分钟。
那么我是否要从上面已经知道的3个细分中计算出这4个细分?
我认为我最好的方法是执行一次for循环,并在几秒钟内一直计数到10:20,然后检查这3个段中是否存在当前秒。如果不是,则将第二秒添加到丢失的段中。
最佳答案
我认为检查每秒是否属于一个间隔不是一个好主意。我认为使用O(n) complexity可以解决此问题,当然可以使用某些.NET类来构造输入,从而使一切变得更加容易。小提琴here。
private static List<Tuple<TimeSpan,TimeSpan>> ComputeMissingTimeSpans(List<Tuple<TimeSpan,TimeSpan>> availableIntervals, TimeSpan minSpan, TimeSpan maxSpan)
{
List<Tuple<TimeSpan,TimeSpan>> missingTime = new List<Tuple<TimeSpan,TimeSpan>>();
if(availableIntervals.Count == 0)
{
missingTime.Add(new Tuple<TimeSpan, TimeSpan>(minSpan, maxSpan));
return missingTime;
}
foreach(var interval in availableIntervals){
if((interval.Item1 - minSpan).TotalSeconds > 1 )
{
missingTime.Add(new Tuple<TimeSpan, TimeSpan>(minSpan, interval.Item1.Add(TimeSpan.FromSeconds(-1))));
}
minSpan = interval.Item2.Add(TimeSpan.FromSeconds(1));
}
if((maxSpan - minSpan).TotalSeconds > 1)
missingTime.Add(new Tuple<TimeSpan, TimeSpan>(minSpan, maxSpan));
return missingTime;
}
您可以轻松地将此功能适应您的需求。
关于c# - C#及时查找所有丢失的段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33728447/