[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)

思路

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

posted @ 2019-02-09 01:17  siriusli  阅读(101)  评论(0编辑  收藏  举报