我需要在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/

10-10 05:19