LeetCode 162 [Find Peak Element]

原題

你給出一個(gè)整數(shù)數(shù)組(size為n),其具有以下特點(diǎn):
相鄰位置的數(shù)字是不同的
A[0] < A[1] 并且 A[n - 2] > A[n - 1]
假定P是峰值的位置則滿足A[P] > A[P-1]且A[P] > A[P+1],返回?cái)?shù)組中任意一個(gè)峰值的位置。

給出數(shù)組[1, 2, 1, 3, 4, 5, 7, 6]返回1, 即數(shù)值 2 所在位置, 或者6, 即數(shù)值 7 所在位置.

解題思路

  • 分三種情況討論
  • nums[mid] < nums[mid - 1]說(shuō)明mid往前是一個(gè)遞增區(qū)間,存在峰值
  • nums[mid] < nums[mid + 1]說(shuō)明mid往后是一個(gè)遞增區(qū)間,存在峰值
  • 第三種情況mid比左右都大,mid就是峰,返回mid

完整代碼

class Solution(object):
    def findPeakElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums:
            return -1
            
        start, end = 0, len(nums) - 1
        while start + 1 < end:
            mid = start + (end - start) / 2
            if nums[mid] < nums[mid - 1]:
                end = mid
            elif nums[mid] < nums[mid + 1]:
                start = mid
            else:
                return mid
        return start if nums[start] > nums[end] else end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容