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 61e1f92

Browse files
committed
feat: update solutions to lc problem: No.0154
No.0154.Find Minimum in Rotated Sorted Array II
1 parent aee3f41 commit 61e1f92

File tree

9 files changed

+216
-139
lines changed

9 files changed

+216
-139
lines changed

‎solution/0100-0199/0153.Find Minimum in Rotated Sorted Array/README.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@
6767

6868
否则,进行二分判断。若 `nums[0] <= nums[mid]`,说明 `[left, mid]` 范围内的元素构成递增数组,最小值一定在 mid 的右侧,否则说明 `[mid + 1, right]`范围内的元素构成递增数组,最小值一定在 mid 的左侧。
6969

70+
时间复杂度 O(logn)。
71+
7072
<!-- tabs:start -->
7173

7274
### **Python3**

‎solution/0100-0199/0154.Find Minimum in Rotated Sorted Array II/README.md‎

Lines changed: 69 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,13 @@
5454

5555
<!-- 这里可写通用的实现逻辑 -->
5656

57-
二分法。
57+
**方法一:二分查找**
5858

59-
`nums[m] > nums[r]`,说明最小值在 m 的右边;若 `nums[m] < nums[r]`,说明最小值在 m 的左边(包括 m);若相等,无法判断,直接将 r 减 1。循环比较。
59+
`nums[mid] > nums[right]`,说明最小值在 mid 的右边;若 `nums[mid] < nums[right]`,说明最小值在 mid 的左边(包括 mid);若相等,无法判断,直接将 right 减 1。循环比较。
6060

61-
最后返回 `nums[l]` 即可。
61+
最后返回 `nums[left]` 即可。
62+
63+
时间复杂度 O(logn)。
6264

6365
<!-- tabs:start -->
6466

@@ -69,16 +71,16 @@
6971
```python
7072
class Solution:
7173
def findMin(self, nums: List[int]) -> int:
72-
l, r = 0, len(nums) - 1
73-
while l < r:
74-
m = (l + r) >> 1
75-
if nums[m] > nums[r]:
76-
l = m + 1
77-
elif nums[m] < nums[r]:
78-
r = m
74+
left, right = 0, len(nums) - 1
75+
while left < right:
76+
mid = (left + right) >> 1
77+
if nums[mid] > nums[right]:
78+
left = mid + 1
79+
elif nums[mid] < nums[right]:
80+
right = mid
7981
else:
80-
r -= 1
81-
return nums[l]
82+
right -= 1
83+
return nums[left]
8284
```
8385

8486
### **Java**
@@ -88,14 +90,18 @@ class Solution:
8890
```java
8991
class Solution {
9092
public int findMin(int[] nums) {
91-
int l = 0, r = nums.length - 1;
92-
while (l < r) {
93-
int m = (l + r) >>> 1;
94-
if (nums[m] > nums[r]) l = m + 1;
95-
else if (nums[m] < nums[r]) r = m;
96-
else --r;
93+
int left = 0, right = nums.length - 1;
94+
while (left < right) {
95+
int mid = (left + right) >> 1;
96+
if (nums[mid] > nums[right]) {
97+
left = mid + 1;
98+
} else if (nums[mid] < nums[right]) {
99+
right = mid;
100+
} else {
101+
--right;
102+
}
97103
}
98-
return nums[l];
104+
return nums[left];
99105
}
100106
}
101107
```
@@ -106,14 +112,15 @@ class Solution {
106112
class Solution {
107113
public:
108114
int findMin(vector<int>& nums) {
109-
int l = 0, r = nums.size() - 1;
110-
while (l < r) {
111-
int m = (l + r) >> 1;
112-
if (nums[m] > nums[r]) l = m + 1;
113-
else if (nums[m] < nums[r]) r = m;
114-
else --r;
115+
int left = 0, right = nums.size() - 1;
116+
while (left < right)
117+
{
118+
int mid = (left + right) >> 1;
119+
if (nums[mid] > nums[right]) left = mid + 1;
120+
else if (nums[mid] < nums[right]) right = mid;
121+
else --right;
115122
}
116-
return nums[l];
123+
return nums[left];
117124
}
118125
};
119126
```
@@ -126,15 +133,19 @@ public:
126133
* @return {number}
127134
*/
128135
var findMin = function (nums) {
129-
let l = 0,
130-
r = nums.length - 1;
131-
while (l < r) {
132-
const m = (l + r) >> 1;
133-
if (nums[m] > nums[r]) l = m + 1;
134-
else if (nums[m] < nums[r]) r = m;
135-
else --r;
136+
let left = 0,
137+
right = nums.length - 1;
138+
while (left < right) {
139+
const mid = (left + right) >> 1;
140+
if (nums[mid] > nums[right]) {
141+
left = mid + 1;
142+
} else if (nums[mid] < nums[right]) {
143+
right = mid;
144+
} else {
145+
--right;
146+
}
136147
}
137-
return nums[l];
148+
return nums[left];
138149
};
139150
```
140151

@@ -143,20 +154,37 @@ var findMin = function (nums) {
143154
```go
144155
func findMin(nums []int) int {
145156
left, right := 0, len(nums)-1
146-
for left+1 < right {
147-
mid := int(uint(left+right) >> 1)
157+
for left < right {
158+
mid := (left + right) >> 1
148159
if nums[mid] > nums[right] {
149-
left = mid
160+
left = mid + 1
150161
} else if nums[mid] < nums[right] {
151162
right = mid
152163
} else {
153164
right--
154165
}
155166
}
156-
if nums[left] < nums[right] {
157-
return nums[left]
158-
}
159-
return nums[right]
167+
return nums[left]
168+
}
169+
```
170+
171+
### **TypeScript**
172+
173+
```ts
174+
function findMin(nums: number[]): number {
175+
let left = 0,
176+
right = nums.length - 1;
177+
while (left < right) {
178+
const mid = (left + right) >> 1;
179+
if (nums[mid] > nums[right]) {
180+
left = mid + 1;
181+
} else if (nums[mid] < nums[right]) {
182+
right = mid;
183+
} else {
184+
--right;
185+
}
186+
}
187+
return nums[left];
160188
}
161189
```
162190

‎solution/0100-0199/0154.Find Minimum in Rotated Sorted Array II/README_EN.md‎

Lines changed: 64 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -49,31 +49,35 @@
4949
```python
5050
class Solution:
5151
def findMin(self, nums: List[int]) -> int:
52-
l, r = 0, len(nums) - 1
53-
while l < r:
54-
m = (l + r) >> 1
55-
if nums[m] > nums[r]:
56-
l = m + 1
57-
elif nums[m] < nums[r]:
58-
r = m
52+
left, right = 0, len(nums) - 1
53+
while left < right:
54+
mid = (left + right) >> 1
55+
if nums[mid] > nums[right]:
56+
left = mid + 1
57+
elif nums[mid] < nums[right]:
58+
right = mid
5959
else:
60-
r -= 1
61-
return nums[l]
60+
right -= 1
61+
return nums[left]
6262
```
6363

6464
### **Java**
6565

6666
```java
6767
class Solution {
6868
public int findMin(int[] nums) {
69-
int l = 0, r = nums.length - 1;
70-
while (l < r) {
71-
int m = (l + r) >>> 1;
72-
if (nums[m] > nums[r]) l = m + 1;
73-
else if (nums[m] < nums[r]) r = m;
74-
else --r;
69+
int left = 0, right = nums.length - 1;
70+
while (left < right) {
71+
int mid = (left + right) >> 1;
72+
if (nums[mid] > nums[right]) {
73+
left = mid + 1;
74+
} else if (nums[mid] < nums[right]) {
75+
right = mid;
76+
} else {
77+
--right;
78+
}
7579
}
76-
return nums[l];
80+
return nums[left];
7781
}
7882
}
7983
```
@@ -84,14 +88,15 @@ class Solution {
8488
class Solution {
8589
public:
8690
int findMin(vector<int>& nums) {
87-
int l = 0, r = nums.size() - 1;
88-
while (l < r) {
89-
int m = (l + r) >> 1;
90-
if (nums[m] > nums[r]) l = m + 1;
91-
else if (nums[m] < nums[r]) r = m;
92-
else --r;
91+
int left = 0, right = nums.size() - 1;
92+
while (left < right)
93+
{
94+
int mid = (left + right) >> 1;
95+
if (nums[mid] > nums[right]) left = mid + 1;
96+
else if (nums[mid] < nums[right]) right = mid;
97+
else --right;
9398
}
94-
return nums[l];
99+
return nums[left];
95100
}
96101
};
97102
```
@@ -104,15 +109,19 @@ public:
104109
* @return {number}
105110
*/
106111
var findMin = function (nums) {
107-
let l = 0,
108-
r = nums.length - 1;
109-
while (l < r) {
110-
const m = (l + r) >> 1;
111-
if (nums[m] > nums[r]) l = m + 1;
112-
else if (nums[m] < nums[r]) r = m;
113-
else --r;
112+
let left = 0,
113+
right = nums.length - 1;
114+
while (left < right) {
115+
const mid = (left + right) >> 1;
116+
if (nums[mid] > nums[right]) {
117+
left = mid + 1;
118+
} else if (nums[mid] < nums[right]) {
119+
right = mid;
120+
} else {
121+
--right;
122+
}
114123
}
115-
return nums[l];
124+
return nums[left];
116125
};
117126
```
118127

@@ -121,20 +130,37 @@ var findMin = function (nums) {
121130
```go
122131
func findMin(nums []int) int {
123132
left, right := 0, len(nums)-1
124-
for left+1 < right {
125-
mid := int(uint(left+right) >> 1)
133+
for left < right {
134+
mid := (left + right) >> 1
126135
if nums[mid] > nums[right] {
127-
left = mid
136+
left = mid + 1
128137
} else if nums[mid] < nums[right] {
129138
right = mid
130139
} else {
131140
right--
132141
}
133142
}
134-
if nums[left] < nums[right] {
135-
return nums[left]
136-
}
137-
return nums[right]
143+
return nums[left]
144+
}
145+
```
146+
147+
### **TypeScript**
148+
149+
```ts
150+
function findMin(nums: number[]): number {
151+
let left = 0,
152+
right = nums.length - 1;
153+
while (left < right) {
154+
const mid = (left + right) >> 1;
155+
if (nums[mid] > nums[right]) {
156+
left = mid + 1;
157+
} else if (nums[mid] < nums[right]) {
158+
right = mid;
159+
} else {
160+
--right;
161+
}
162+
}
163+
return nums[left];
138164
}
139165
```
140166

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
class Solution {
2-
public:
3-
int findMin(vector<int>& nums) {
4-
int l = 0, r = nums.size() - 1;
5-
while (l < r) {
6-
int m = (l + r) >> 1;
7-
if (nums[m] > nums[r]) l = m + 1;
8-
else if (nums[m] < nums[r]) r = m;
9-
else --r;
10-
}
11-
return nums[l];
12-
}
1+
class Solution {
2+
public:
3+
int findMin(vector<int>& nums) {
4+
int left = 0, right = nums.size() - 1;
5+
while (left < right)
6+
{
7+
int mid = (left + right) >> 1;
8+
if (nums[mid] > nums[right]) left = mid + 1;
9+
else if (nums[mid] < nums[right]) right = mid;
10+
else --right;
11+
}
12+
return nums[left];
13+
}
1314
};
Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
1-
func findMin(nums []int) int {
2-
left, right := 0, len(nums)-1
3-
for left+1 < right {
4-
mid := int(uint(left+right) >> 1)
5-
if nums[mid] > nums[right] {
6-
left = mid
7-
} else if nums[mid] < nums[right] {
8-
right = mid
9-
} else {
10-
right--
11-
}
12-
}
13-
if nums[left] < nums[right] {
14-
return nums[left]
15-
}
16-
return nums[right]
17-
}
1+
func findMin(nums []int) int {
2+
left, right := 0, len(nums)-1
3+
for left < right {
4+
mid := (left + right) >> 1
5+
if nums[mid] > nums[right] {
6+
left = mid + 1
7+
} else if nums[mid] < nums[right] {
8+
right = mid
9+
} else {
10+
right--
11+
}
12+
}
13+
return nums[left]
14+
}

0 commit comments

Comments
(0)

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