zoukankan      html  css  js  c++  java
  • Lintcode: Find Peak Element

    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 in this array. Return the index of the peak.
    
    Note
    The array may contains multiple peeks, find any of them.
    
    Example
    [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)

    跟Leetcode Find Peak Element一样

    有一些考虑:因为梯度下降法是要比较m、m+1、m-1三个index大小,因此为保证不outofbound,令l = 1, r = A.length-2; 这样也可以maintain一个性质:l、r始终在peak element可能的区域内

     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         if (A==null || A.length<3) return -1;
     8         int l = 1;
     9         int r = A.length - 2;
    10         while (l <= r) {
    11             int m = (l + r) / 2;
    12             if (A[m]>A[m+1] && A[m]>A[m-1]) return m;
    13             else if (A[m]<A[m+1] && A[m]>A[m-1]) {
    14                 l = m + 1;
    15             }
    16             else {
    17                 r = m - 1;
    18             }
    19         }
    20         return -2;
    21     }
    22 }
  • 相关阅读:
    如果经常访问国外站
    CouchDB降临Android
    ubuntu server操作流程百岁版
    开源HTML解析工具包jsoup 1.3.1发布
    LEMP aka LNMP
    VC编译选项
    gae地址
    feedparser 同步博客园rss到 qq zone
    跨系统共享键盘鼠标利器分享:synergy
    支持ff,ie的回车提交
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/4276933.html
Copyright © 2011-2022 走看看