力扣面试150题--搜索旋转排序数组
Day 84
题目描述
思路
标准二分查找要求数组完全有序,但旋转排序数组可以通过以下步骤处理:
- 确定中点 mid:计算 mid = beg + (end - beg) / 2,避免整数溢出。
- 判断左右哪部分有序:
如果 nums[beg] <= nums[mid],说明左半部分 [beg, mid] 有序。
否则,右半部分 [mid, end] 有序。 - 缩小搜索范围:
如果目标值 target 在有序部分的范围内,则在该部分继续搜索。
否则,在另一部分搜索。
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;}
}