原文:154. 寻找旋转排序数组中的最小值 II(leetcode 解题) - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/leetcode/leetcode-javascript-solution-0154/

题目:

难度:Hard

相关话题:数组二分查找

假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,1,2,4,5,6,7] ** 可能变为 [4,5,6,7,0,1,2] )。

请找出其中最小的元素。

注意数组中可能存在重复的元素。

示例 1:

输入: [1,3,5]
输出: 1

示例2:

输入: [2,2,2,0,1]
输出: 0

说明:

/**
 * @来源: Javascript中文网 - 前端进阶资源教程 https://www.javascriptc.com/
 * @介绍:一个致力于帮助开发者用代码改变世界为使命的平台,每天都可以在这里找到技术世界的头条内容
 * @param {number[]} nums
 * @return {number}
 */
var findMin = function(nums) {
  let lo = 0;
  let hi = nums.length - 1;
  let mid = 0;

  while(lo < hi) {
      mid = lo + Math.floor((hi - lo) / 2);
      if (nums[mid] > nums[hi]) {
          lo = mid + 1;
      }else if (nums[mid] < nums[hi]) {
          hi = mid;
      }else {
          hi--;
      }
  }
  return nums[lo];
};