leetcode:https://leetcode-cn.com/problems/search-in-rotated-sorted-array/
方法一:
有序数组查找,使用二分
进行二分,l、r、mid,两边必有一边是有序的
1、如果nums[l] <= nums[mid - 1],说明左侧有序
(1)、如果target在左侧,在查找范围缩小到左侧
(2)、如果target不在左侧,则一定在右侧,查找范围缩小到右侧
2、否则右侧一定有序
(1)、如果target在右侧,在查找范围缩小到右侧
(2)、如果target不在右侧,则一定在左侧,查找范围缩小到左侧
/** * @param {number[]} nums * @param {number} target * @return {number} */ var search = function(nums, target) { let l = 0; let r = nums.length - 1; let mid = -1; while (l <= r) { // 向上取整,避免l等于mid的情况 mid = Math.ceil((l + r) / 2); console.log('l = ', l, ' r = ', r, ' mid = ', mid) if (target === nums[mid]) return mid; if (nums[l] <= nums[mid - 1]) { // 左侧有序 if (target >= nums[l] && target <= nums[mid - 1]) { r = mid - 1; } else { l = mid + 1; } } else { // 右侧有序 if (target >= nums[mid + 1] && target <= nums[r]) { l = mid + 1; } else { r = mid - 1; } } } return -1; };
-----smile