jinhuang1102

162. Find Peak Element

Feb 1st, 2019
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.62 KB | None | 0 0
  1. """
  2. Find Peak Element
  3. 这道题要求找出任意峰值,需要考虑三种case:
  4. case 1:[1,2,3,4,5] 在这个单调递增的array中最后一个值是峰值。
  5. case 2: [5,4,3,2,1] 在这个单调递减的array中第一个值是峰值。
  6. case 3: [1,2,3,4,2] 在这种无序的array中index=3是峰值。
  7. """
  8. # 方法一:线性时间复杂度,如果在array中下一位的值比当前位的值小,那么我们就说当前位是一个峰值。
  9. class Solution(object):
  10.     def findPeakElement(self, nums):
  11.         """
  12.        :type nums: List[int]
  13.        :rtype: int
  14.        """
  15.         for i in range(0, len(nums)-1):
  16.             if nums[i] > nums[i+1]:
  17.                 return i
  18.         return len(nums) - 1
  19.  
  20. # 方法二: 对数时间复杂度,
  21. class Solution(object):
  22.     def binarySearch(self, nums, l, r):
  23.         if l == r:
  24.             return l
  25.         mid = (l + r) // 2
  26.         if nums[mid] > nums[mid+1]:
  27.             return self.binarySearch(nums, l, mid)
  28.         return self.binarySearch(nums, mid+1, r)
  29.    
  30.     def findPeakElement(self, nums):
  31.         """
  32.        :type nums: List[int]
  33.        :rtype: int
  34.        """
  35.         return self.binarySearch(nums, 0, len(nums)-1)
  36.  
  37. class Solution(object):
  38.     def findPeakElement(self, nums):
  39.         """
  40.        :type nums: List[int]
  41.        :rtype: int
  42.        """
  43.         l = 0
  44.         r = len(nums)-1
  45.        
  46.         while l < r:
  47.            
  48.             mid = (l + r) // 2
  49.            
  50.             if nums[mid] > nums[mid+1]:
  51.                 r = mid
  52.             else:
  53.                 l = mid + 1
  54.                
  55.         return l
Advertisement
Add Comment
Please, Sign In to add comment