[LintCode] 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 peek if:

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

Notice
The array may contains multiple peeks, find any of them.

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

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

4/24/2017

算法班

题目里面已经强调了前两个元素增,最后两个元素减,所以中间肯定有peak。如果没有这两个条件怎么办

 1 class Solution {
 2     /**
 3      * @param A: An integers array.
 4      * @return: return any of peek positions.
 5      */
 6     public int findPeak(int[] A) {
 7         // write your code here
 8         if (A == null || A.length == 0) return -1;
 9         int start = 0, end = A.length - 1;
10         
11         while (start + 1 < end) {
12             int mid = start + (end - start) / 2;
13             if (A[mid] > A[mid - 1] && A[mid] > A[mid + 1]) return mid;
14             else if (A[mid - 1] < A[mid] && A[mid] < A[mid + 1]) {
15                 start = mid;
16             } else {
17                 end = mid;
18             }
19         }
20         return A[start] > A[end]? A[start]: A[end];
21     }
22 }
原文地址:https://www.cnblogs.com/panini/p/6760913.html