搜索旋转排序数组
class Solution { public int search(int[] nums, int target) { int res = -1; int l = 0; int r = nums.length - 1; while(l <= r){ int mid = (l + r) / 2; if(nums[mid] == target){ //找到最终结果直接跳出 res = mid; break; } //已经找到最接近目标值的一个数 if(l == r){ break; } //左侧数组有序 if(mid != l && nums[mid - 1] >= nums[l]){ if(nums[l] <= target && target <= nums[mid - 1]){ r = mid - 1; }else{ l = mid + 1; } } //右侧数组有序(注意左侧数组有序时,右侧数组仍然可能有序,只需要判断一次即可) else if(mid != r && nums[mid + 1] <= nums[r]){ if(nums[mid + 1] <= target && target <= nums[r]){ l = mid + 1; }else{ r = mid - 1; } } } return res; } }