以下是一个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有交集.
技术交流qq群:143280841