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

假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [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为无穷小。

 */

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容