基于折半查找,主要思想就是:
1、先找到mid元素,相等返回mid;
2、找到有序部分;
3、根据target是否在有序部分,进行循环划分;
主要代码:
public class Solution {
public int search(int[] nums, int target) {
int low = 0;
int high = nums.length-1;
int n = nums.length;
while(low <= high) {
int middle = (low + high)/2;
if(target == nums[middle]) {
return middle;
}else if(nums[middle]<nums[n-1]) {//右边有序
if(target<=nums[n-1]&&target>nums[middle]) //在有序部分
low = middle + 1;
else {
high = middle - 1;
}
}else {//左边有序
if(target>=nums[0]&&target<nums[middle]) //在有序部分
high = middle - 1;
else {
low = middle + 1;
}
}
}
return -1;
}
}