1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python寻峰 [LeetCode][Python]162. 寻找峰值

python寻峰 [LeetCode][Python]162. 寻找峰值

时间:2023-12-02 02:02:58

相关推荐

python寻峰 [LeetCode][Python]162. 寻找峰值

[LeetCode][Python]162. 寻找峰值

峰值元素是指其值大于左右相邻值的元素。

给定一个输入数组 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) 时间复杂度的。

思路:

暴力求解,依次遍历,看是否比前一个和后一个大,这个肯定很耗时

二分查找: 查找时,左指针 l,右指针 r,以其保持左右顺序为循环条件

根据左右指针计算中间位置 m,并比较 m 与 m+1 的值,如果 m 较大,则左侧存在峰值,r = m,如果 m + 1 较大,则右侧存在峰值,l = m + 1

#! /usr/bin/env python

#coding=utf-8

class Solution(object):

def findPeakElement(self, nums):

"""

:type nums: List[int]

:rtype: int

"""

for i in range(1, len(nums)-1):

if nums[i] > nums[i-1] and nums[i] > nums[i+1]:

return i

def findPeakElement2(self, nums):

l = 0

r = len((nums)) - 1

while(l < r):

mid = (l + r)//2

if nums[mid] > nums[mid+1]:

r = mid

else:

l = mid + 1

return l

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。