题目:编写一个程序,给定一个含有N个不同整数的数组,找到一个局部最小元素:满足a[i] < a[i-1],且a[i] < a[i+1]的索引i。
代码如下
/*----------局部最小值---------------*/
//如果a[x] < a[x-1],a[y]<a[y+1],则a[x...y]的子数组中一定存在局部最小元素,即极小值
//默认数组的开头元素的前一个,和结尾元素的后一个为无穷大
#include <vector>
using namespace std;
int PartMin(vector<int> v)
{
if (v.empty())
return -1;
int lo = 0;
int hi = v.size() - 1;
while (lo <= hi)
{
int mid = lo + (hi - lo) / 2;
if (v[0] < v[1])
return 0;
else if (v[v.size() - 1] < v[v.size() - 2])
return v.size() - 1;
else if (v[mid] > v[mid - 1])
hi = mid - 1;
else if (v[mid] > v[mid + 1])
lo = mid + 1;
else
return mid;
}
}