一個給定的不包含相同元素的整數(shù)數(shù)組齐蔽,每個两疚,局部極小值的定義是一個值比左右相鄰的(如果存在)都小的值,求它的一個局部最小值
遍歷數(shù)組 O(n)時間復雜度含滴。
二分查找 O(logn)時間復雜度:
數(shù)組范圍是 [0,n-1]鬼雀,因此假想在下標-1和n處有兩個取值為無窮大的哨兵。
mid = (x + y) / 2,二分蛙吏,兩個子數(shù)組a[x..mid], a[mid + 1..y]
若a[mid] < a[mid + 1], 則子數(shù)組a[x..mid]滿足a[x] < a[x - 1], a[mid] < a[mid + 1]
反之a(chǎn)[mid] > a[mid + 1], 則子數(shù)組a[mid + 1..y]滿足a[mid + 1] < a[mid], a[y] < a[y + 1]
實現(xiàn):
int findLocalMax(const vector<int> &v)
{
int lo = 0,hi = v.size()-1;
while(lo<hi)
{
int mid = (lo+hi)>>1;//由于整數(shù)除法 其實是向下取整
if(v[mid]>v[mid+1]){
lo = mid+1;
}else{
hi = mid;
}
}
return lo; //跳出循環(huán) lo 一定等于 hi
}