LeetCode 852. Peak Index in a Mountain Array C++ 解题报告

852. Peak Index in a Mountain Array -- Easy

方法一:二分查找

int peakIndexInMountainArray(vector<int>& A) {
    
    // insert another two elements to avoid out of bound
    const int INT_MAX_ = 2147483647;
    const int INT_MIN_ = (-INT_MAX_-1);
    // insert INT_MIN_ before A.begin()
    A.insert(A.begin(),INT_MIN_);
    A.push_back(INT_MIN_);
    int left = 1, right = A.size()-2;

    // binary search
    while(left <= right) {
        int mid = left + (right - left) /2;
        if(A[mid-1] < A[mid] && A[mid] > A[mid+1]) return mid-1;
        if(A[mid-1] < A[mid] && A[mid] < A[mid+1]) left = mid + 1;
        if(A[mid-1] > A[mid] && A[mid] > A[mid+1]) right = mid - 1;
    }
    
    return -1;x
    
}

官方答案:

class Solution {
    public int peakIndexInMountainArray(int[] A) {
        int lo = 0, hi = A.length - 1;
        while (lo < hi) {
            int mi = lo + (hi - lo) / 2;
            if (A[mi] < A[mi + 1])
                lo = mi + 1;
            else
                hi = mi;
        }
        return lo;
    }
}
  • Time Complexity: O(logN)
  • Space Complexity: O(1)

方法二:遍历找到数值下降的点

略。

参考:

posted on 2018-10-13 15:14  Haikyuu  阅读(240)  评论(0)    收藏  举报