题目描述:

思路分析:
本题前置题目:寻找旋转排序数组中的最小值,解析链接如下
https://mp.csdn.net/mp_blog/creation/editor/156110328
本题是在此题的基础上查找目标值,数组经过旋转之后被分成两个部分,这两个部分都是一个从小到大排列的子数组,如果我们能够得出这两个字数组,然后再分别对他们进行2分查找,就能够查找出目标值。
代码:
java
class Solution {
int zhuixiao(int[] nums){
int left=0;
int n=nums.length;
int right=nums.length-1;
while(left<right){
int mid=(right-left)/2+left;
if(nums[mid]>nums[n-1]){
left=mid+1;
}else{
right=mid;
}
}
return right;
}
int erfen(int[] nums,int target,int left,int right){
while(left<=right){
int mid=(right-left)/2+left;
if(nums[mid]==target){
return mid;
}
if(nums[mid]>target){
right=mid-1;
}
if(nums[mid]<target){
left=mid+1;
}
}
return -1;
}
public int search(int[] nums, int target) {
if(nums.length==0){
return -1;
}
int n=nums.length;
int a=zhuixiao(nums);
if(target>=nums[a]&&target<=nums[n-1]){
return erfen(nums,target,a,n-1);
}else{
return erfen(nums,target,0,a-1);
}
}
}
代码说明:
先找出字数组,分别为【0,a-1】和【a,n-1】。去判断target与nums【n-1】的关系,如果target比nums【n-1】大,则说明其在【0,a-1】中,否则在【a,n-1】中。