Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f57cd88

Browse files
Create 153. 寻找旋转排序数组中的最小值.md
1 parent 0d9ca36 commit f57cd88

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#### 153. 寻找旋转排序数组中的最小值
2+
3+
难度:中等
4+
5+
---
6+
7+
已知一个长度为 `n` 的数组,预先按照升序排列,经由 `1``n`**旋转** 后,得到输入数组。例如,原数组 `nums = [0,1,2,4,5,6,7]` 在变化后可能得到:
8+
9+
* 若旋转 `4` 次,则可以得到 `[4,5,6,7,0,1,2]`
10+
* 若旋转 `7` 次,则可以得到 `[0,1,2,4,5,6,7]`
11+
12+
注意,数组 `[a[0], a[1], a[2], ..., a[n-1]]` **旋转一次** 的结果为数组 `[a[n-1], a[0], a[1], a[2], ..., a[n-2]]`
13+
14+
给你一个元素值 **互不相同** 的数组 `nums` ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 **最小元素**
15+
16+
你必须设计一个时间复杂度为 `O(log n)` 的算法解决此问题。
17+
18+
**示例 1:**
19+
20+
```
21+
输入:nums = [3,4,5,1,2]
22+
输出:1
23+
解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。
24+
```
25+
26+
**示例 2:**
27+
28+
```
29+
输入:nums = [4,5,6,7,0,1,2]
30+
输出:0
31+
解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。
32+
```
33+
34+
**示例 3:**
35+
36+
```
37+
输入:nums = [11,13,15,17]
38+
输出:11
39+
解释:原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。
40+
```
41+
42+
**提示:**
43+
44+
* `n == nums.length`
45+
* `1 <= n <= 5000`
46+
* `-5000 <= nums[i] <= 5000`
47+
* `nums` 中的所有整数 **互不相同**
48+
* `nums` 原来是一个升序排序的数组,并进行了 `1``n` 次旋转
49+
50+
---
51+
52+
二分查找:
53+
54+
考虑以下三种情况
55+
56+
1. 左值 < 中值, 中值 < 右值 :没有旋转,最小值在最左边,可以收缩右边界
57+
2. 左值 > 中值, 中值 < 右值 :有旋转,最小值在左半边,可以收缩右边界
58+
3. 左值 < 中值, 中值 > 右值 :有旋转,最小值在右半边,可以收缩左边界
59+
60+
因此选择中值与右值比较。
61+
62+
```Java
63+
class Solution {
64+
public int findMin(int[] nums) {
65+
int left = 0, right = nums.length - 1;
66+
while(left < right){
67+
int mid = (right + left) / 2;
68+
if(nums[mid] < nums[right]){
69+
right = mid;
70+
} else {
71+
left = mid + 1;
72+
}
73+
}
74+
return nums[left];
75+
}
76+
}
77+
```

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /