码迷,mamicode.com
首页 > 编程语言 > 详细

leetcode 日记 162. Find Peak Element java python

时间:2016-08-23 19:02:34      阅读:369      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

根据题目可知,输入为:一个相邻元素不相等的数列,输出为:其中一个(上)峰值的序号。并且要求时间复杂度为logn

分析:由于题目要求时间复杂度为logn,因此不能进行全部遍历。又因为只需要找到其中的一个峰值,那么,每次对半分,便可以达到logn的复杂度。

   根据对半分的思路继续想,不难发现只要确定了中间位置的数是处在上升阶段还是下降阶段,就可以确定在某一侧必有一个峰值。

   往复多次,即可找出两个点,其中一个一定处于某一个峰值上。

java代码:

 1 public int findPeakElement(int []nums)
 2     {
 3         int left=0;
 4         int right=nums.length-1;
 5         if(right==0) return 0;
 6         while(left<right-1)
 7         {
 8             int mid=(left+right)/2;
 9             if (nums[mid]<nums[mid+1])//上升
10             {
11                 left=mid+1;
12             }
13             else//下降
14             {
15                 right=mid;
16             }
17         }
18         return nums[left]>nums[right]?left:right;
19     }

python代码:

def findPeakElement(self, nums):
        length=len(nums)
        if length==1:
            return 0
        left=0
        right=length-1
        while left<right-1:
            mid=(left+right)/2
            #increase
            if nums[mid]<nums[mid+1]:
                left=mid+1
            #decrease
            else:
                right=mid
        return left if nums[left]>nums[right] else right

 

leetcode 日记 162. Find Peak Element java python

标签:

原文地址:http://www.cnblogs.com/aksdenjoy/p/5800420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!