class Solution {
public:
int search(int A[], int n, int target) {
int first = 0, last = n - 1;
while(first <= last){
int mid = (first + last)/2; //当first和last之间有奇数个数时,mid在正中间;
if(A[mid]==target) return mid; //当first和last之间有偶数个数时,mid偏向first;
if(A[first]<=A[mid]){ //if的条件处都带等号,注意在等号成立时缩小first和last之间范围;
if(target>=A[first]&&target<=A[mid]){ //重点分析最后last和first之间只剩1个和2个元素时的情况
last = mid;//可以缩小范围
}else{
first = mid + 1;//可以缩小范围
}
}else{
if(target>=A[mid]&&target<=A[last]){
first = mid;//可以缩小范围
}else{
last = mid -1;//可以缩小范围
}
}
}
return -1;
}
};
Search in Rotated Sorted Array
最新推荐文章于 2018-09-18 20:48:05 发布