搜索旋转排序数组
解题思
二分法找到旋转数组最小值nums[i] 然后根据判断条件选择两边中的一边进行二分搜索
时间复杂度O(2logN)
代码
在这里插入代码片
class Solution {
public int search(int[] nums, int target) {
if(nums==null||nums.length==0)
return -1;
int i=0,j=nums.length-1;
while(i<j)
{
int mid=i+(j-i)/2;
if(nums[mid]<=nums[j])
j=mid;
else i=mid+1;
}
int res=-1;
if(target>=nums[i]&&target<=nums[nums.length-1])
{
res=binaryS(nums,i,nums.length-1,target);
}
else if(i>=1&&target<=nums[i-1])
{
res=binaryS(nums,0,i-1,target);
}
return res;
}
private int binaryS(int[] nums,int i,int r,int target)
{
while(i<=r)
{
int m=i+(r-i)/2;
if(nums[m]==target)
{
return m;
}
else if(nums[m]<target)
{
i=m+1;
}
else r=m-1;
}
return -1;
}
}
https://leetcode-cn.com/problems/search-in-rotated-sorted-array/solution/sou-suo-xuan-zhuan-pai-xu-shu-zu-by-a-lie-lie-ou-q/