zoukankan      html  css  js  c++  java
  • lintcode75- Find Peak Element- medium

    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
    • 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.
    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)

    halfhalf二分法(OOXXOOXX)。如果卡到爬坡知道右边肯定存在peak,如果卡到降坡知道左边肯定存在peak,所以每次还是可以果断改start, end取半的。

    public class Solution {
        /*
         * @param A: An integers array.
         * @return: return any of peek positions.
         */
        public int findPeak(int[] A) {
            // write your code here
            if (A == null || A.length == 0){
                throw new IllegalArgumentException();
            }
    
            int start = 0;
            int end = A.length - 1;
    
            while (start + 1 < end){
                int mid = start + (end - start) / 2;
                if (A[mid + 1] - A[mid] < 0){
                    end = mid;
                } else {
                    start = mid;
                }
            }
    
            if (A[start] > A[end]){
                return start;
            }
            return end;
        }
    }
  • 相关阅读:
    centOS和windows7双系统下重装windows后恢复centOS引导
    第一天
    Spring初学
    myBatis-一级缓存与二级缓存
    myBatis-类型关联
    myBatis-智能标签
    myBati初学
    myBati初学
    博客系统开发
    Y2分班考试 笔试题总结
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/7580084.html
Copyright © 2011-2022 走看看