zoukankan      html  css  js  c++  java
  • 【Lintcode】075.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 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)

    题解:

    class Solution {
    public:
        /**
         * @param A: An integers array.
         * @return: return any of peek positions.
         */
        int findPeak(vector<int> A) {
            if (A.size() < 3) {
                return -1;
            }
            
            int n = A.size();
            int start = 1;
            int end = n - 1;
            while (start < end - 1) {
                int mid = start + (end - start) / 2;
                if (A[mid] > A[mid - 1] && A[mid] > A[mid + 1]) {
                    return mid;
                } else if (A[mid] > A[mid-1]) {
                    start = mid;
                } else {
                    end = mid;
                }
            }
            
            if (A[start] > A[start + 1]) {
                return start;
            } else if (A[end] > A[end - 1]) {
                return end;
            }
            
            return -1;
        }
    };
  • 相关阅读:
    C#操作json
    sql server 2008 身份验证失败 18456
    MD5密码加密
    oracle dg 报错提示 涉及硬盘错误
    Rhel6.5 相关操作
    Centos6.9部署vnc
    Sqluldr2 libclntsh.so报错处理
    时钟服务器同步方法
    windows copy 和xcopy
    Linux 本地repo配置
  • 原文地址:https://www.cnblogs.com/Atanisi/p/6822290.html
Copyright © 2011-2022 走看看