package leetcode;
public class demo_33 {
public int search(int[] nums, int target) {
int left=0;
int right=nums.length-1;
while(left<=right) {
if(target>nums[right]&&target<nums[left]) {
return -1;
}
int mid=(left+right)/2;
//如果中间值大于最左边的值,则从最左到中间都是递增的
if(nums[mid]>=nums[left]) {
if(nums[mid]>=target) {
//判断target是否可能在这个递增区间内
if(-1==twodivide(nums,left, mid, target)) {
left=mid+1;
}
else {
return twodivide(nums,left, mid, target);
}
}
else {
left=mid+1;
}
}
//如果中间值小于最左边的值,则从中间到最右边都是递增的
else {
if(nums[mid]<=target) {
//判断target是否可能在这个递增区间内
if(-1==twodivide(nums,mid,right, target)) {
right=mid-1;
}
else {
return twodivide(nums,mid,right, target);
}
}
else {
right=mid-1;
}
}
}
return -1;
}
//二分查找
public int twodivide(int nums[],int left,int right,int target) {
int mid;
while(left<=right) {
mid=(left+right)/2;
if(nums[mid]==target) {
return mid;
}
if(nums[mid]>target) {
right=mid-1;
}
if(nums[mid]<target) {
left=mid+1;
}
}
return -1;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
demo_33 d33=new demo_33();
int[]nums={3,1};
System.out.println(d33.search(nums, 1));
}
}