浅谈 山脉数组的峰顶索引 问题
作者:互联网
山脉数组的峰顶索引
问题:
符合下列属性的数组 arr 称为 山脉数组 :
arr.length >= 3
存在
i(0 < i < arr.length - 1)
使得:
arr[0] < arr[1] < ... arr[i-1] < arr[i]
arr[i] > arr[i+1] > ... > arr[arr.length - 1]
给你由整数组成的山脉数组
arr
,返回任何满足arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
的下标i
。
思路:
由于题目过于简单,限制了传入参数必为山脉数组,所以一次遍历找出最大值下标返回即可。
法二:二分查找。
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
size_t i = 0;
while(arr[i] < arr[i +1]) ++i;
return i;
}
};
时间复杂度:O(n)
空间复杂度:O(1)
// 二分查找
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
size_t left = 1, right = arr.size() - 2;
while(left <= right) {
size_t mid = (left + right) / 2;
if(arr[mid] < arr[mid + 1]) {
left = mid + 1;
}
else {
right = mid - 1;
}
}
return left;
}
};
时间复杂度:O(log(n))
空间复杂度:O(1)
- 拓展:给一个数组,判断它是否为山脉数组,如果不是返回 0;是返回峰顶索引。
标签:...,arr,峰顶,浅谈,mid,索引,数组,size,left 来源: https://blog.csdn.net/weixin_48033173/article/details/117935000