leetcode 162

一个整数队列. 每两个相邻的数都不相同. 找到一个数, 使得其大于相邻的数, 输出该数的index. 如果有多个满足条件的数, 只需要输出任意一个即可. 要求算法复杂度为O(logn)

因为要求算法复杂度是O(n)一定是二分法. 然后容易知道的一点是对于任意满足条件的整数队列, 都可以找到这样的数.

首先任意取一个数, 如果这个数满足条件, 那就输出; 如果不满足的话, 如果左边的数更大, 那么就从左边的子列中寻找, 右边亦然.
所以代码就显而易见了

class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        start = 0
        end = len(nums) - 1
        while start < end:
            mid = (start + end) // 2
            if nums[mid] < nums[mid + 1]:
                start = mid + 1
            else:
                end = mid
        return start
        
posted @ 2021-11-21 19:33  茫茫碧落  阅读(31)  评论(0编辑  收藏  举报