写点什么

LeetCode 题解:153. 寻找旋转排序数组中的最小值,二分查找,JavaScript,详细注释

用户头像
Lee Chen
关注
发布于: 2021 年 02 月 09 日
LeetCode题解:153. 寻找旋转排序数组中的最小值,二分查找,JavaScript,详细注释

原题链接:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/


解题思路:


  1. 根据题意,可以分为两种情况分析:


* nums[mid] < nums[right]


用例:[5,6,1,2,3,4]


用例:[11,13,15,17]


用例:[3,1,2]


* nums[mid] > nums[right]


用例:[3,4,5,6,1,2]


用例:[2,1]


  1. 该题没有一个目标值供查找,可以让左右指针相遇时,共同指向的就是最小值。因此循环继续条件为left < right


/** * @param {number[]} nums * @return {number} */var findMin = function (nums) {  let left = 0; // 二分查找左边界  let right = nums.length - 1; // 二分查找右边界
// 由于该题没有目标值可供判断,因此循环需要在left等于right之前退出 // 两个指针相遇时,表示找到了结果 while (left < right) { // 取两个指针的中点 const mid = (left + right) >> 1;
// nums[mid] < nums[right]时,表示旋转点在左半边 if (nums[mid] < nums[right]) { // 由于mid总是向下取整,因此在极限情况,区间只剩两个值时,mid=left,对应用例[3,1,2] // 并且该题没有中点等于目标值的判断,因此中点必须始终包含在区间内 right = mid; } // nums[mid] > nums[right]时,表示旋转点在右半边 else if (nums[mid] > nums[right]) { // 此时中点的值必然不是最小值,因此left可以等于mid+1 left = mid + 1; } }
// 退出循环时,左右指针必然相遇,并且指向最小值,将其返回即可 return nums[left];};
复制代码


发布于: 2021 年 02 月 09 日阅读数: 15
用户头像

Lee Chen

关注

还未添加个人签名 2018.08.29 加入

还未添加个人简介

评论

发布
暂无评论
LeetCode题解:153. 寻找旋转排序数组中的最小值,二分查找,JavaScript,详细注释