leetcode 153. Find Minimum in Rotated Sorted Array

二分查找:数组

  1. 找到数组的中间元素 mid
  2. 若是中间元素 > 第一个元素,说明第一个元素到中间元素是升序的,最小值在 mid 右边
  3. 若是中间元素 < 数组第一个元素,说明最小值在 mid 左边
  4. nums[mid] > nums[mid + 1] 的时候 mid+1 是最小值 nums[mid-1] > nums[mid] 的时候 nums[mid] 是最小值
  5. 特殊状况 长度为1的时候第一个最小,有序数组的时候 nums[r]>nums[0] 也是第一个最小
var findMin = function(nums) {
  let l=0,r=nums.length-1;
    if(nums.length==1) return nums[0]
    if(nums[r]>nums[0]) return nums[0]
	while(l<=r){
		let mid=(l+r)>>1;
		if(nums[mid] > nums[mid + 1]) return nums[mid+1]
		if(nums[mid-1] > nums[mid]) return nums[mid]
		if(nums[mid]>nums[0])
			l=mid;
		else 
			r=mid;
	}
	return -1;
};
复制代码
相关文章
相关标签/搜索