[Lintcode]75. Find Peak Element

Posted siriusli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Lintcode]75. Find Peak Element相关的知识,希望对你有一定的参考价值。

75. Find Peak Element

Description

There is an integer array which has the following features:

The numbers in adjacent positions are different.
A[0] < A[1] && A[A.length - 2] > A[A.length - 1].
We define a position P is a peak if:

A[P] > A[P-1] && A[P] > A[P+1]
Find a peak element in this array. Return the index of the peak.

Example
Given [1, 2, 1, 3, 4, 5, 7, 6]

Return index 1 (which is number 2) or 6 (which is number 7)

Challenge
Time complexity O(logN)

Notice
It‘s guaranteed the array has at least one peak.
The array may contain multiple peeks, find any of them.
The array has at least 3 numbers in it.

我的代码

class Solution:
    """
    @param A: An integers array.
    @return: return any of peek positions.
    """
    def findPeak(self, A):
        # write your code here
        r = len(A) - 2
        l = 1
        m = int((l + r) / 2)
        while (l <= r):
            #print(l,m,r)
            if A[m - 1] < A[m] and A[m]> A[m + 1]:
                return m
            else:
                if A[m-1]<A[m]<A[m+1]:
                    l = m+1
                else:
                    r = m-1
                m = int((l+r)/2)

思路

由于一定有峰值 ,所以不用考虑在谷底的时候到底往左还是往右。









以上是关于[Lintcode]75. Find Peak Element的主要内容,如果未能解决你的问题,请参考以下文章

lintcode-medium-Find Peak Element

[Leetcode + Lintcode] 162. Find Peak Element

[LintCode] Find Peak Element 求数组的峰值

75 寻找峰值

162. Find Peak Element

[LintCode] 159 Find Minimum in Rotated Sorted Array