C代码
int search(int* nums, int numsSize, int target){
int l,h,mid;
int i;
l = 0;
h = numsSize - 1;
while(1) {
if(l > h) return -1;
mid = (l + h) / 2;
if(target == nums[l]) return l;
if(target == nums[h]) return h;
if (mid == l || mid == h) return -1;
if (target > nums[mid]) {
if (nums[mid] > nums[0]) {
l = mid + 1;
} else {
if(target < nums[0]) {
l = mid + 1;
} else {
h = mid - 1;
}
}
} else if (target < nums[mid]) {
if (nums[mid] > nums[0]) {
if (target < nums[0]) {
l = mid + 1;
} else {
h = mid - 1;
}
} else {
h = mid - 1;
}
} else {
return mid;
}
}
return -1;
}
注意点
- 找
nums[mid]
所在的波段,比较清晰的判断方式就是与nums[0]
进行比较,nums[mid]>nums[0]
说明nums[mid]
所在前半段,前半段范围均比后半段值更大; l
与h
的变换注意mid
的+1
与-1
操作;- 注意
mid与h
或者mid与l
相等的情况判断避免死循环;
结果
题目