寻找旋转有序数组的最小值之二。思路跟[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 };
01-05 15:18