Advertisement
serega1112

1235

Dec 12th, 2020
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.90 KB | None | 0 0
  1. class Solution:
  2.     def jobScheduling(self, startTime: List[int], endTime: List[int], profit: List[int]) -> int:
  3.        
  4.         jobs = [(startTime[i], endTime[i], profit[i]) for i in range(len(profit))]
  5.         jobs.sort(key=lambda x: x[1])
  6.        
  7.         memo = defaultdict(int)
  8.        
  9.         e_prev = 0
  10.         for i, (s, e, p) in enumerate(jobs):
  11.             memo[e] = max(memo[e], p)
  12.             memo[e] = max(memo[e], memo[e_prev])
  13.             e_prev = e
  14.            
  15.             if jobs[0][1] <= s:
  16.                 l = 0
  17.                 r = i
  18.                 while r - l > 1:
  19.                     mid = l + (r - l) // 2
  20.                     if jobs[mid][1] <= s:
  21.                         l = mid
  22.                     else:
  23.                         r = mid
  24.                        
  25.                 memo[e] = max(memo[e], p + memo[jobs[l][1]])
  26.                    
  27.         return memo[e]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement