LeetCode 真题 153 寻找旋转排序数组中的最小值

2020-02-18  本文已影响0人  暖男Gatsby

假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。

示例:输入:[3,4,5,1,2] 输出:1, [4,5,6,7,0,1,2]输出:0

var findMin = function(nums) {

  let low = 0,

      high = nums.length - 1,

      ans = Infinity;

  while (low <= high) {

    let mid = low + Math.floor((high - low) / 2);

    if (nums[low] <= nums[mid]) {

      ans = Math.min(ans, nums[low]);

      low = mid + 1;

    } else {

      ans = Math.min(ans, nums[mid]);

      high = mid - 1;

    }

  }

  return ans;

};

/**

 * @param {number[]} nums

 * @return {number}

 * 通过二分法寻找有序数组段,找到后,

 * 将当前最小值与有序数组段的最小值进行比较,

 * 即可获取数组最小值,

 * 往往最简单直接的算法实现方式是最高效的。Infinity为正无穷大,-Infinity为无穷小。

 */

上一篇下一篇

猜你喜欢

热点阅读