/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
if(nums.length==0) return -1;
function dfs(low,high){
if(nums[low]==target) return low;
if(nums[high]==target) return high;
if(low==high||low==high-1){
return -1
}
let mid=Math.floor((low+high)/2);
if(nums[mid]==target) return mid;
if(nums[mid]>nums[low]){
//大子序列
if(target>nums[low]&&target<nums[mid]){
return dfs(low,mid)
}else{
return dfs(mid+1,high)
}
}else{
if(target>nums[mid]&&target<nums[high]){
return dfs(mid,high)
}else{
return dfs(low,mid)
}
}
}
return dfs(0,nums.length-1);
};
思路:
如果mid比数组的第一个元素大的话,说明从左到mid为止是递增的,mid在大序列里面,如果mid比数组的第一个元素小的话,说明从左边一个值或者从mid开始是递减的,mid在小序列里面。
分两种情况进行递归二分搜索