|
21 | 21 |
|
22 | 22 | class InsertInterval { |
23 | 23 | func insert(_ intervals: [Interval], _ newInterval: Interval) -> [Interval] { |
24 | | - var index = 0 |
25 | | - var result: [Interval] = [] |
26 | | - var tempInterval = Interval(newInterval.start, newInterval.end) |
27 | | - |
28 | | - while index < intervals.count && newInterval.start > intervals[index].end { |
29 | | - result.append(intervals[index]) |
30 | | - index += 1 |
31 | | - } |
32 | | - |
33 | | - while index < intervals.count && newInterval.end >= intervals[index].start { |
34 | | - let minStart = min(tempInterval.start, intervals[index].start) |
35 | | - let maxEnd = max(tempInterval.end, intervals[index].end) |
36 | | - tempInterval = Interval(minStart, maxEnd) |
37 | | - index += 1 |
| 24 | + var res = [Interval](), insertIdx = 0 |
| 25 | + |
| 26 | + for (i, interval) in intervals.enumerated() { |
| 27 | + if interval.isOverlap(with: newInterval) { |
| 28 | + newInterval.start = min(newInterval.start, interval.start) |
| 29 | + newInterval.end = max(newInterval.end, interval.end) |
| 30 | + } else { |
| 31 | + if interval.end < newInterval.start { |
| 32 | + insertIdx += 1 |
| 33 | + } |
| 34 | + |
| 35 | + res.append(interval) |
| 36 | + } |
38 | 37 | } |
39 | | - result.append(tempInterval) |
40 | | - |
41 | | - for i in index ..< intervals.count { |
42 | | - result.append(intervals[i]) |
| 38 | + |
| 39 | + res.insert(newInterval, at: insertIdx) |
| 40 | + |
| 41 | + return res |
| 42 | + } |
| 43 | + |
| 44 | + extension Interval { |
| 45 | + func isOverlap(with interval: Interval) -> Bool { |
| 46 | + return start <= interval.end && end >= interval.start |
43 | 47 | } |
44 | | - |
45 | | - return result |
46 | 48 | } |
47 | 49 | } |
0 commit comments