题目:
思路:
二分搜索,分两段,其中必然一段有序,一段无序,判断target是否在有序还是在无序的那一段中,不断收缩边界,最终返回target下标,找不到则返回-1;
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function (nums, target) {
let left = 0, right = nums.length - 1;
while (left <= right) {
let mid = Math.floor((left + right) / 2)
if (target == nums[mid]) return mid;
if (nums[left] <= nums[mid]) {
if (target >= nums[left] && target < nums[mid])
right = mid - 1;
else
left = mid + 1;
}
else {
if (target > nums[mid] && target <= nums[right])
left = mid + 1;
else
right = mid - 1;
}
}
return -1;
}