题目:
峰值元素是指其值大于左右相邻值的元素。
给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。
数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞。
示例 1:
输入: nums = [1,2,3,1]
输出: 2
解释: 3 是峰值元素,你的函数应该返回其索引 2。
示例 2:
输入: nums = [1,2,1,3,5,6,4]
输出: 1 或 5
解释: 你的函数可以返回索引 1,其峰值元素为 2;
或者返回索引 5, 其峰值元素为 6。
说明:
你的解法应该是 O(logN) 时间复杂度的。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-peak-element
方法一:
O(logN)的时间复杂度,第一反应就是二分法。题目告知,边界值相当于负无穷,以保证序列存在峰值。
则一个序列的两端边界都是呈下降趋势,则该序列一定包含峰值。
所以当进行二分法时,应该利用边界值大的那一半去寻找峰值,因为要保证该序列的两端都满足下降条件。
class Solution:
def findPeakElement(self, nums: List[int]) -> int:
l = len(nums)
return self.partation(nums, 0, l)
def partation(self, nums, start, end):
l = end-start
if l==1:
return start
middle_index = (start+end)//2
if nums[middle_index-1]<nums[middle_index]:
return self.partation(nums, middle_index, end)
else:
return self.partation(nums, start, middle_index)
本文介绍了一种在数组中快速查找峰值元素的算法,峰值元素定义为其值大于左右相邻值的元素。通过使用二分法,可以在O(logN)的时间复杂度内找到峰值,即使数组中存在多个峰值,也能返回任一峰值的位置。示例展示了如何在不同数组中应用此算法。
366

被折叠的 条评论
为什么被折叠?



