[LeetCode]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 是如上定义的山脉

思路:

这是一道简单难度的题目。因为已经是山脉数组了,所以游标前进比较每个元素的大小,当第一次遇到元素的下一个元素小于本元素的值时,该元素即是山顶peak,返回其序号即可。

AC代码:

//一个效率不高的版本
class Solution {
public:
    int peakIndexInMountainArray(vector<int>& A) {
        if(A.size() < 3)
            return 0;
        int peakIndex = 0,presentMax =0;
        for(vector<int>::iterator it = A.begin(); it != A.end(); it++)
        {
            if(*it >= presentMax)
            {
                presentMax = *it;
            }
            else
                break;
            peakIndex++;
        }
        return peakIndex-1 ;
    }
};

Published by