在时间跨度列表中寻找最大的时间跨度之间的持续时间

问题描述 投票:0回答:1

我写了这段代码来寻找有序时间跨度之间最大的时间跨度差距。它的工作是正确的,但是否有一个更有效的方法来完成这个任务,因为如果有很多项目在列表中,这可能会变得非常缓慢?

var events = this.Events.OrderBy(x => x.TimeSinceStart).ToList();

var largestTime = events.FirstOrDefault().TimeSinceStart;

for(int i = 0; i < events.Count() - 1; i ++)
{
    var difference = events[i + 1].TimeSinceStart - events[i].TimeSinceStart;

    if (difference > largestTime)
        largestTime = difference;
}
c# timespan
1个回答
2
投票

你的算法复杂度无法提高,因为它已经处于最佳状态(O(nlogn) 用于排序),但你可以通过跳过 TimeSpan 比较使用 Ticks:

var eventTicks = this.Events.Select(x => x.TimeSinceStart.Ticks).OrderBy(x => x).ToList();

var largestTime = eventTicks.FirstOrDefault();

for (int i = 0; i < eventTicks.Count - 1; i++)
{
    var difference = eventTicks[i + 1] - eventTicks[i];

    if (difference > largestTime)
        largestTime = difference;
}

var maxGap = TimeSpan.FromTicks(largestTime);
© www.soinside.com 2019 - 2024. All rights reserved.