public IList<Interval> Insert(IList<Interval> intervals, Interval newInterval) { var result = new List<Interval>(); for (int i = 0; i < intervals.Count; i++) { if (newInterval.start > intervals[i].end) { result.Add(intervals[i]); } else if (newInterval.end < intervals[i].start) { result.Add(newInterval); for (int j = i; j < intervals.Count; j++) { result.Add(intervals[j]); } return result; } else { newInterval.start = Math.Min(intervals[i].start, newInterval.start); newInterval.end = Math.Max(intervals[i].end, newInterval.end); } } result.Add(newInterval); return result; }
public void UnitTest() { Interval[] interval = new Interval[5]; for (int index = 1; index < 6; index++) interval[index - 1] = new Interval(index, index + 5); Console.WriteLine(CanAttendMeetingsByArraySort(interval)); for (int index = 1; index < 6; index++) interval[index - 1] = new Interval(index, 1); Console.WriteLine(CanAttendMeetingsByArraySort(interval)); }
private bool CanAttendMeetingsByBinarySort(Interval[] interval) { if (interval == null) return true; int length = interval.Length; if (length == 0) return true; BinarySort(interval, 0, length - 1); for (int index = 0; index < length - 1; index++) if (interval[index].end > interval[index + 1].start) return false; return true; }
private bool CanAttendMeetingsByArraySort(Interval[] interval) { if (interval == null) return true; int length = interval.Length; if (length == 0) return true; IComparer revComparer = new IntervalComparer(); Array.Sort(interval, revComparer); for (int index = 0; index < length - 1; index++) if (interval[index].end > interval[index + 1].start) return false; return true; }
private void BinarySort(Interval[] interval, int low, int high) { if (low > high) return; int start = low; int end = high; int key = interval[start].start; int temp = 0; while (start < end) { while (start < end && (key.ToString() + interval[end].start.ToString()).CompareTo(interval[end].start.ToString() + key.ToString()) > 0) { end--; } if (start < end) { temp = interval[start].start; interval[start].start = interval[end].start; interval[end].start = temp; start++; } while (start < end && (key.ToString() + interval[start].start.ToString()).CompareTo(interval[end].start.ToString() + key.ToString()) < 0) { start++; } if (start < end) { temp = interval[start].start; interval[start].start = interval[end].start; interval[end].start = temp; end--; } } interval[start].start = key; BinarySort(interval, low, start - 1); BinarySort(interval, start + 1, high); }