Day 84
题目描述

思路
标准二分查找要求数组完全有序,但旋转排序数组可以通过以下步骤处理:
- 确定中点 mid:计算 mid = beg + (end - beg) / 2,避免整数溢出。
- 判断左右哪部分有序:
如果 nums[beg] <= nums[mid] ,说明左半部分 [beg, mid] 有序。
否则,右半部分 [mid, end] 有序。 - 缩小搜索范围:
如果目标值 target 在有序部分的范围内 ,则在该部分继续搜索。
否则,在另一部分搜索。
java
class Solution {
public int search(int[] nums, int target) {
int beg=0;
int end=nums.length-1;
while(beg<=end){
int mid=beg+(end-beg)/2;
if(target==nums[mid]){
return mid;
}
if(nums[beg]<=nums[mid]){//左半有序
if(target<=nums[mid]&&target>=nums[beg]){
end=mid-1;
}
else{
beg=mid+1;
}
}
else{//右半有序
if(target>nums[mid]&&target<=nums[end]){
beg=mid+1;
}
else{
end=mid-1;
}
}
}
return -1;
}
}