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
提示:
3 <= A.length <= 10000
- 0 <= A[i] <= 10^6
- 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
来源:CSDN
作者:wanghy1995
链接:https://blog.csdn.net/sinat_27953939/article/details/103784790