1 Search In Rotated Array
2 Search In Rotated Array ||
if(A[begin]==A[mid] begin++; skip 就可以了
3 Search For a Range
1)标准二分+ 左右扩展,最坏情况O(n)
2) 分别求 lower_bound和 upper_bound, O(lgn)
4 Search Insertion Position
1)标准二分,最后没找到return -1的地方 改为return i。
2)lower_bound
5 求 Rotated sorted Array中最小值, (有重复值和无重复值)
6 把 Rotated sorted Array 恢复到原来的顺序
先解第5题,定位到最小值的index,然后 rotate.(三个reverse)
7 在排序数组中找和给定值最接近的
int findClosest(vector<int> A, int begin, int end, int target)
{
int minDiff = INT_MAX, minIndex = -1;
while(begin<=end) {
int mid = (begin+end)/2;
if(abs(A[mid]-target)<minDiff){
minDiff = abs(A[mid]-target);
minIndex = mid;
}
if(A[mid]<target) begin = mid+1;
else end = mid-1;
}
return minIndex;
}