leetcode hot100 33.搜索旋转数组

112 阅读1分钟

题目:

image.png

思路:

二分搜索,分两段,其中必然一段有序,一段无序,判断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;
}