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