Advertisement
HXXXXJ

57. Insert Interval

Apr 15th, 2019
373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.39 KB | None | 0 0
  1. func insert(_ intervals: [Interval], _ newInterval: Interval) -> [Interval] {
  2.         var intervals = intervals, i = 0
  3.        
  4.         //找到第一个开始比新Interval大的点
  5.         while i < intervals.count {
  6.             if newInterval.start < intervals[i].start {
  7.                 break
  8.             }
  9.             i += 1
  10.         }
  11.         //判断之前的那个点是不是和新的overlap, 如果是从之前就要开始merge
  12.         if i > 0 && isOverlapped(newInterval, intervals[i-1]) {
  13.             i = i - 1
  14.         }
  15.         //把不需要的加入result
  16.         var res = intervals[0 ..< i]
  17.        
  18.         //开始merge直到不overlap为止
  19.         var newInterval = newInterval
  20.         while i < intervals.count && isOverlapped(newInterval, intervals[i]) {
  21.             newInterval = mergeOverlapped(intervals[i], newInterval)
  22.             i += 1
  23.         }
  24.         res.append(newInterval)
  25.        
  26.         //加入后面的部分
  27.         res += intervals[i ..< intervals.count]
  28.         return Array(res)
  29.     }
  30.    
  31.     func isOverlapped(_ i: Interval, _ j: Interval) -> Bool {
  32.         if i.end < j.start || j.end < i.start { return false}
  33.         return true
  34.     }
  35.    
  36.     func mergeOverlapped(_ interval1: Interval, _ interval2: Interval) -> Interval {
  37.         return Interval(min(interval1.start, interval2.start), max(interval1.end, interval2.end))
  38.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement