什么是旋转数组呢?
4567012 再复制一遍 4567012 4567012 中间的能得到原来的数组
简单二分+循环数组
方法:二分查找,
一:一分为二后,一定是一边的升序数组,一边是循环数组
二:这时候就判断target是在升序数组里面,还是在循环数组里面。
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
let left=0;
let right=nums.length-1;
while(left<=right){
mid=Math.floor(left+(right-left)/2);
if(nums[mid]===target){
return mid;
}
if(nums[mid]>nums[right]){ //第一步:判断哪一边是升序数组,哪一边是循环数组
if(nums[mid]>target && nums[left]<=target){ //一般都是用升序的那一边判断目标在不在升序的那一边,方便一点
right=mid-1;
}
else{
left=mid+1;
}
}
else{ //这里就是左边是循环数组,右边是升序数组
if(nums[mid]<target && nums[right]>=target){
left=mid+1;
}
else{
right=mid-1;
}
}
}
return -1;
};