852. Peak Index in a Mountain Array

我怕爱的太早我们不能终老 提交于 2020-01-25 21:56:08

852. 山脉数组的峰顶索引

我们把符合下列属性的数组 A 称作山脉:

  • A.length >= 3
  • 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]

给定一个确定为山脉的数组,返回任何满足 A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1] 的 i 的值。

 

示例 1:

输入:[0,1,0]
输出:1

示例 2:

输入:[0,2,1,0]
输出:1

 

提示:

  1. 3 <= A.length <= 10000
  2. 0 <= A[i] <= 10^6
  3. A 是如上定义的山脉

 

解法一

//时产复杂度O(n), 空间复杂度O(1)
class Solution {
public:
    int peakIndexInMountainArray(vector<int>& A) {
        int n = A.size(), i;
        for(i = 1; i < n; i++) {
            if(A[i - 1] < A[i]) continue;
            break;
        }
        return i - 1;
    }
};

解法二

//时间复杂度O(logn), 空间复杂度O(1)
class Solution {
public:
    int peakIndexInMountainArray(vector<int>& A) {
        int low = 1, high = A.size() - 2;
        while(low <= high) {
            int mid = low + (high - low) / 2;
            if(A[mid] > A[mid + 1] && A[mid] < A[mid - 1]) high = mid - 1;
            else if(A[mid] < A[mid + 1] && A[mid] > A[mid - 1]) low = mid + 1;
            else return mid;
        }
        return 0;
    }
};

解法一: 这个解法思路很直白,找到第一个下降的位置返回即可。

解法二: 二分法,提升了效率。

2019/07/16 21:26
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!