-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path153_javascript.js
53 lines (44 loc) · 1.33 KB
/
153_javascript.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// 假设按照升序排序的数组在预先未知的某个点上进行了旋转。例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] 。
// 请找出其中最小的元素。
//
// 示例 1:
// 输入:nums = [3,4,5,1,2]
// 输出:1
// 示例 2:
// 输入:nums = [4,5,6,7,0,1,2]
// 输出:0
// 示例 3:
// 输入:nums = [1]
// 输出:1
//
// 提示:
// 1 <= nums.length <= 5000
// -5000 <= nums[i] <= 5000
// nums 中的所有整数都是 唯一 的
// nums 原来是一个升序排序的数组,但在预先未知的某个点上进行了旋转
/**
* @param {number[]} nums
* @return {number}
*/
var findMin = function (nums) {
let left = 0;
let right = nums.length - 1;
while (left < right) {
let middle = Math.floor(left + (right - left) / 2);
// 判断当 mid < right 缩小右边界
if (nums[middle] < nums[right]) {
right = middle;
// 当 mid > right 缩小左边界 因为 mid必不为最小 可以跳过 left = middle + 1
} else if (nums[middle] > nums[right]) {
left = middle + 1;
}
// 可以直接 else
// 因为 当 middle == right right = Math.floor(left + (right - left) / 2);
// 可以求得 right - left == (right -left) /2 left == right
// 和while语句不符
/* else {
left = middle + 1;
} */
}
return nums[left];
};