Advertisement
Guest User

Untitled

a guest
May 20th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.97 KB | None | 0 0
  1. class Solution:
  2.     def findMin(self, nums: List[int]) -> int:
  3.         """
  4.        Oh! We're looking for the peak in the list,
  5.        where we're guaranteed there's only one peak.
  6.        """
  7.         def get_val(x):
  8.             if x < 0:
  9.                 return -float('inf')
  10.             if x >= len(nums):
  11.                 return float('inf')
  12.             return nums[x]
  13.        
  14.         def is_peak(x):
  15.             return get_val(x) < get_val(x-1) and get_val(x) < get_val(x+1)
  16.        
  17.         if len(nums) == 2:
  18.             return min(nums)
  19.    
  20.         l, r = 0, len(nums) - 1
  21.         midpoint = (r - l) // 2
  22.         while not is_peak(midpoint) and l < r:
  23.             print(l, midpoint, r)
  24.             if nums[l] < nums[midpoint]:
  25.                 l = midpoint
  26.             else:
  27.                 r = midpoint
  28.             midpoint = l + (r - l) // 2
  29.             print('after', l, midpoint, r)
  30.            
  31.         return min([nums[0], nums[midpoint], nums[-1]])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement