(1)二分法:不断缩减区间,left=right时跳出循环,输出的left(或right)即为数组峰值索引
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
int left=0;int right=arr.size()-1;int mid;
while(left<right)
{
mid=left+(right-left)/2;
if(arr[mid]<arr[mid+1])
{
left=mid+1;
}
else
{
right=mid;
}
}
return left;
}
};
(2) 第一个for循环寻找数组最大值,第二个for循环寻找其对应的索引:
class Solution {
public:
int peakIndexInMountainArray(vector<int>& arr) {
int temp;int b=arr.size();vector<int> brr=arr;int a;
for(int i=0;i<b-1;i++)
{
if(arr[i]>arr[i+1])
{
temp=arr[i+1];
arr[i+1]=arr[i];
arr[i]=temp;
}
}
for(int j=0;j<b;j++)
{
if(brr[j]==arr[b-1])
{
a=j;
break;
}
}
return a;
}
};