在旋轉后的升序數(shù)組中找到指定的值,二分法的變形
首先判斷起始節(jié)點是否等于指定值梆砸,等于則直接返回转质,否則執(zhí)行
- 增序或者降序并且 target 在其中的,或者 mid < end < target(這種情況可以理解為mid-> end中間進行了降序和反轉帖世,所以只能從前面一半進行尋找)
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
return search_helper(nums, target, 0, nums.length - 1)
};
var search_helper = function(nums, target, start, end){
if (!nums) return -1
if(nums[start] === target) return start
if(nums[end] === target) return end
if(start >= end) return -1
var mid = Math.floor((end - start)/2) + start
if(nums[mid] === target) return mid
if((nums[start] < nums[mid] && target > nums[start] && target < nums[mid]) ||
(nums[start] > nums[mid] && target < nums[start] && target < nums[mid]) ||
(nums[mid] < nums[end] && target > nums[mid] && target > nums[end])
){
return search_helper(nums, target, 0, mid - 1)
}else{
return search_helper(nums, target, mid + 1, end)
}
}