思路1——单次遍历
代码1
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
for(int i=0;i<arr.size();i++)
if(arr[i]>arr[i+1])
return i;
return 0;
}
};
思路2——二分法
- 去除循环“=” 防止出界
- 逆序时 right要包含mid
代码2
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
int n = arr.size();
int left = 0, right = n - 1;
while (left < right) {
int mid = (left + right) / 2;
if (arr[mid] > arr[mid + 1])
right = mid;
else
left = mid + 1;
}
return left;
}
};
本文介绍两种高效算法寻找山形数组中的峰值索引:单次遍历法与二分查找法。单次遍历法通过一次循环找到峰值位置;二分查找法则利用数组特性快速定位峰值。
421

被折叠的 条评论
为什么被折叠?



