定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0]
class Solution {
public:
int getLessIndex(vector<int> arr) {
if(arr.empty())
return -1;
if(arr.size()==1)
return 0;
int begin=0;
int end=arr.size()-1;
return binarysearch(arr,begin,end);
}
int binarysearch(vector<int> arr,int &begin,int &end)
{
if(end-begin==0)
return begin;
if(end-begin==1)
{
if(arr[begin]>arr[end])
return end;
else if(arr[begin]<arr[end])
return begin;
else
return -1;
}
int mid=begin+(end-begin)/2;
if(arr[begin]<arr[begin+1])
return begin;
else if(arr[end-1]>arr[end])
return end;
else
{
if(arr[mid]<arr[mid+1]&&arr[mid]<arr[mid-1])
return mid;
else if (arr[mid]>arr[mid-1])
end=mid;
else if (arr[mid]>arr[mid+1])
begin=mid;
else
begin=mid;
return binarysearch(arr,begin,end);
}
return -1;
}
};