题目要求: 852. 山脉数组的峰顶索引
题目解析
今天同样是个简单的二分题,题目是让你求一个数组中先上升,后下降的那个点的索引。还有我在上一个题目中问道的,二分的时候数组不一定是有序的,这个题目就是一种表现形式,当然还有其他的表现形式。
解题思路
这个题大家可能用的是的解法,但是题目最后要求是用,所以这个题还是二分。可能大家想想就能想到了,先上升后下降的点,那么我们先找到中间的一个数,把这个数与前一个和后一个进行比较,如果是一直上升,我们就知道结果在后半个区间,如果是一直下降,我们知道结果在左半个区间。否则当前的值就是结果。
代码和详细注释如下
//C++题解
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
int l = 0;
int r = arr.size();
while(l<r)
{
int mid = l +(r-l)/2;
if(arr[mid]>arr[mid-1]&&arr[mid]<arr[mid+1])
l = mid+1;
else if(arr[mid]<arr[mid-1]&&arr[mid]>arr[mid+1])
r = mid;
else return mid;
}
return 0;
}
};class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
int l = 0;
int r = arr.size();
while(l<r)
{
int mid = l +(r-l)/2;
if(arr[mid]>arr[mid-1]&&arr[mid]<arr[mid+1])
l = mid+1;
else if(arr[mid]<arr[mid-1]&&arr[mid]>arr[mid+1])
r = mid;
else return mid;
}
return 0;
}
};
通过情况
欢迎关注微信公众号:【没伞的孩子拼命跑】 和我的小伙伴们一块打卡吧