• [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 }
  • 相关阅读:
    异步编程
    MVC返回文件
    MVC源码分析
    MVC源码分析
    MVC源码分析
    MVC源码分析
    MVC源码分析
    MVC源码分析
    MVC源码分析
    MVC源码分析
  • 原文地址:https://www.cnblogs.com/panini/p/6760913.html
Copyright © 2020-2023  润新知