代码实现:
思路:二分法
int search(int *nums, int numsSize, int target) { int l = 0, r = numsSize - 1; while (l <= r) { // 左闭右闭 int mid = (l + r) >> 1; if (nums[mid] == target) { return mid; } if (nums[l] <= nums[mid]) { // 说明l - mid 是有序的 if (target >= nums[l] && target < nums[mid]) { // target在l - mid间 则mid - 1 缩小范围继续查 r = mid - 1; } else { l = mid + 1; } } else { // 说明mid - r 是有序的 if (target > nums[mid] && target <= nums[r]) { // target在mid - r间 则mid + 1 缩小范围继续查 l = mid + 1; } else { r = mid - 1; } } } return -1; }