以下是一个C#实现,用于确定一个时间段是否与另一个时间段集合重叠或交叉,如果有重叠或交叉则返回false。

算法:

传递要检查的时间段和时间段集合作为参数。

对于时间段集合中的每个时间段,检查它是否与要检查的时间段重叠或者有交叉。

如果有重叠或交叉,则返回false表示它们不应该重叠或交叉,否则返回true。

代码实现:

public bool IsValidDateRange(DateRange dateRange, List<DateRange> existingRanges){
    foreach(var existingRange in existingRanges){
        //check if the start date or end date of dateRange falls in the existingRange
        if((dateRange.StartDate >= existingRange.StartDate && dateRange.StartDate <= existingRange.EndDate) ||
            (dateRange.EndDate >= existingRange.StartDate && dateRange.EndDate <= existingRange.EndDate)){
            return false;
        }
        //check if the existingRange falls in the dateRange
        if((existingRange.StartDate >= dateRange.StartDate && existingRange.StartDate <= dateRange.EndDate) || 
            (existingRange.EndDate >= dateRange.StartDate && existingRange.EndDate <= dateRange.EndDate)){
            return false;
        }
    }
    return true;
}

public class DateRange {
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
}
这个算法的时间复杂度取决于时间段集合的大小。

 a  b 两个时间段, 先看 a是否与b有交集,在看b是否跟a有交集.

posted on 2023-05-10 17:00  小石头的一天  阅读(62)  评论(0编辑  收藏  举报