[153] 寻找旋转排序数组中的最小值

50 阅读1分钟
/*
 * @lc app=leetcode.cn id=153 lang=javascript
 *
 * [153] 寻找旋转排序数组中的最小值
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @return {number}
 */
var findMin = function (nums) {
  if (nums.length === 1) return nums[0]
  // 定义两个执政的下标
  let left = 0,
    right = nums.length - 1
  // 如果最后一个大于第一个,说明数组没有被反转
  if (nums[right] > nums[0]) return nums[0]
  while (left <right) {
    let mid = Math.floor(left + (right - left) / 2)
    // 如果刚好在中间就返回最小值
    if (nums[mid] > nums[mid + 1]) {
      return nums[mid + 1]
    } else if (nums[mid] < nums[mid - 1]) {
      return nums[mid]
    }
    // 没有就继续二分,判断最小值是在那一边
    if(nums[mid]>nums[left]){
      left=mid+1
    }else{
      right=mid-1
    }

  }
}
// @lc code=end