二分查找
1, 右邊區(qū)間有序
1.1 target落在右邊,在右邊繼續(xù)二分
1.2 target落在左邊,在左邊二分
2,左邊有序
2.1 target落在左邊,在左邊繼續(xù)二分
2.2 target落在右邊,在左邊右分
找到就返回,沒找到的話在循環(huán)返回的l ,r中查找是否存在target.
int search(int* nums, int numsSize, int target) {
int l = 0;
int r = numsSize - 1;
int mid = 0;
while(l+1 < r){
mid = l + (r-l)/2;
if(nums[mid] == target)
return mid;
if(nums[mid] < nums[r]){
//right is ordered
//if target locates a right parits
if(target <= nums[r] && target >= nums[mid])
l = mid;
else
r = mid;
}else{
//left is ordered
if(target<= nums[mid] && target >= nums[l])
r = mid;
else
l = mid;
}
}
if(nums[l] == target)
return l;
if(nums[r] == target)
return r;
return -1;
}