寻找旋转有序数组的最小值之二。思路跟[LeetCode] 153. Find Minimum in Rotated Sorted Array很接近,唯一多的一个条件是如果input里面有重复数字怎么办。这里需要多一个判断条件,如果判断不出来mid和end之间的关系的时候,只能尝试end--。所以这题worst case的时间会到O(n)。
时间O(logn), worst case O(n)
空间O(1)
1 /** 2 * @param {number[]} nums 3 * @return {number} 4 */ 5 var findMin = function(nums) { 6 // corner case 7 if (nums === null || nums.length === 0) return -1; 8 9 // normal case 10 let start = 0; 11 let end = nums.length - 1; 12 while (start + 1 < end) { 13 let mid = Math.floor(start + (end - start) / 2); 14 if (nums[mid] < nums[end]) { 15 end = mid; 16 } else if (nums[mid] > nums[end]) { 17 start = mid + 1; 18 } else { 19 end--; 20 } 21 } 22 if (nums[start] < nums[end]) return nums[start]; 23 else return nums[end]; 24 };