LeetCode-Find Peak Element

xiaoxiao2021-02-28  100

Link

题意:在log2N时间中,找到一组数中的峰值(大于左右两边)。如1,3,7,4,6,2 中7 6 都是。

解析

一看log2N就知道必定二分,但如何二分,进入左右哪边? 因为这个是求局部的峰值,不必求全局最优之类的。可以发现对于数组中任何一个数字他都能归到某一个峰值区间中,那么对于mid处的数字,如果他小于他后面的数字那他所处的峰值定然在前半部分,反之后半部分。

class Solution(object): def findPeakElement(self, nums): """ :type nums: List[int] :rtype: int """ numlen=len(nums) st=0 ed=numlen-1 while(st<ed): mid=(st+ed)/2 if nums[mid] >nums[mid+1]: ed=mid else: st=mid+1 return st

问题

刚开始没有想通这个特性,仅仅在纠结要大于两边,其实在自左至右扫描过程中大于左边的情况已经判断了。后来又想到区间K大数字,想歪了这个必然有快排中的扫描操作。

转载请注明原文地址: https://www.6miu.com/read-62129.html

最新回复(0)