Advertisement
Guest User

Untitled

a guest
Oct 24th, 2016
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.61 KB | None | 0 0
  1. # Definition for an interval.
  2. # class Interval(object):
  3. #     def __init__(self, s=0, e=0):
  4. #         self.start = s
  5. #         self.end = e
  6.  
  7. class Solution(object):
  8.     def find_start(self, intervals, start):
  9.         """
  10.        find the index of first interval iv that iv.end >= newInterval.start
  11.        """
  12.         lo, hi = 0, len(intervals) - 1
  13.         ret = -1
  14.         while lo <= hi:
  15.             mid = (lo+hi)/2
  16.             iv = intervals[mid]
  17.             if iv.end < start: lo = mid+1
  18.             else: hi = mid-1
  19.         return lo
  20.        
  21.     def find_end(self, intervals, end):
  22.         """
  23.        find the first index that doesn't overlap with new interval end point
  24.        """
  25.         lo, hi = 0, len(intervals) - 1
  26.         ret = -1
  27.         while lo <= hi:
  28.             mid = (lo+hi)/2
  29.             iv = intervals[mid]
  30.             if iv.start <= end: lo = mid+1
  31.             else: hi = mid-1
  32.         return lo
  33.    
  34.     def insert(self, intervals, newInterval):
  35.         """
  36.        :type intervals: List[Interval]
  37.        :type newInterval: Interval
  38.        :rtype: List[Interval]
  39.        """
  40.         if not intervals: return [newInterval]
  41.         first = self.find_start(intervals, newInterval.start)
  42.         last = self.find_end(intervals, newInterval.end)
  43.        
  44.         if first == last:
  45.             intervals.insert(first, newInterval)
  46.         else:
  47.             intervals[first].start = min(intervals[first].start, newInterval.start)
  48.             intervals[first].end = max(intervals[last-1].end, newInterval.end)
  49.             intervals[first+1:last] = []
  50.         return intervals
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement