Skip to content

Commit f333970

Browse files
committed
1 parent e1ca640 commit f333970

File tree

9 files changed

+123
-89
lines changed

9 files changed

+123
-89
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555
1. [三数之和](/solution/0000-0099/0015.3Sum/README.md)
5656
1. [四数之和](/solution/0000-0099/0018.4Sum/README.md)
5757
1. [合并两个有序数组](/solution/0000-0099/0088.Merge%20Sorted%20Array/README.md)
58+
1. [寻找旋转排序数组中的最小值](/solution/0100-0199/0153.Find%20Minimum%20in%20Rotated%20Sorted%20Array/README.md)
59+
1. [寻找旋转排序数组中的最小值 II](/solution/0100-0199/0154.Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II/README.md)
5860

5961
### 字符串
6062

README_EN.md

+2
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ Complete solutions to [LeetCode](https://leetcode-cn.com/problemset/all/), [LCOF
5454
1. [3Sum](/solution/0000-0099/0015.3Sum/README_EN.md)
5555
1. [4Sum](/solution/0000-0099/0018.4Sum/README_EN.md)
5656
1. [Merge Sorted Array](/solution/0000-0099/0088.Merge%20Sorted%20Array/README_EN.md)
57+
1. [Find Minimum in Rotated Sorted Array](/solution/0100-0199/0153.Find%20Minimum%20in%20Rotated%20Sorted%20Array/README_EN.md)
58+
1. [Find Minimum in Rotated Sorted Array II](/solution/0100-0199/0154.Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II/README_EN.md)
5759

5860
### Strings
5961

lcof/面试题11. 旋转数组的最小数字/README.md

+20-38
Original file line numberDiff line numberDiff line change
@@ -27,53 +27,35 @@
2727
```python
2828
class Solution:
2929
def minArray(self, numbers: List[int]) -> int:
30-
if len(numbers) == 1 or numbers[0] < numbers[-1]:
31-
return numbers[0]
32-
left, right = 0, len(numbers) - 1
33-
while (right - left > 1):
34-
mid = left + ((right - left) >> 1)
35-
if numbers[mid] == numbers[left] == numbers[right]:
36-
return min(numbers[left: right + 1])
37-
if numbers[mid] >= numbers[left]:
38-
left = mid
39-
elif numbers[mid] <= numbers[right]:
40-
right = mid
41-
return numbers[right]
30+
l, r = 0, len(numbers) - 1
31+
while l < r:
32+
m = l + ((r - l) >> 1)
33+
if numbers[m] > numbers[r]:
34+
l = m + 1
35+
elif numbers[m] < numbers[r]:
36+
r = m
37+
else:
38+
r -= 1
39+
return numbers[l]
4240
```
4341

4442
### **Java**
4543

4644
```java
4745
class Solution {
4846
public int minArray(int[] numbers) {
49-
int len = numbers.length;
50-
if (len == 1 || numbers[0] < numbers[len - 1]) {
51-
return numbers[0];
52-
}
53-
54-
int left = 0, right = len - 1;
55-
while (right - left > 1) {
56-
int mid = left + ((right - left) >> 1);
57-
if (numbers[left] == numbers[mid] && numbers[mid] == numbers[right]) {
58-
return findMin(numbers, left, right);
59-
}
60-
if (numbers[mid] >= numbers[left]) {
61-
left = mid;
62-
} else if (numbers[mid] <= numbers[right]) {
63-
right = mid;
64-
}
65-
}
66-
return numbers[right];
67-
}
68-
69-
private int findMin(int[] numbers, int left, int right) {
70-
int min = numbers[left];
71-
for (int i = left + 1; i < right; ++i) {
72-
if (min > numbers[i]) {
73-
min = numbers[i];
47+
int l = 0, r = numbers.length - 1;
48+
while (l < r) {
49+
int m = l + ((r - l) >> 1);
50+
if (numbers[m] > numbers[r]) {
51+
l = m + 1;
52+
} else if (numbers[m] < numbers[r]) {
53+
r = m;
54+
} else {
55+
--r;
7456
}
7557
}
76-
return min;
58+
return numbers[l];
7759
}
7860
}
7961
```
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,16 @@
11
class Solution {
22
public int minArray(int[] numbers) {
3-
int len = numbers.length;
4-
if (len == 1 || numbers[0] < numbers[len - 1]) {
5-
return numbers[0];
6-
}
7-
8-
int left = 0, right = len - 1;
9-
while (right - left > 1) {
10-
int mid = left + ((right - left) >> 1);
11-
if (numbers[left] == numbers[mid] && numbers[mid] == numbers[right]) {
12-
return findMin(numbers, left, right);
13-
}
14-
if (numbers[mid] >= numbers[left]) {
15-
left = mid;
16-
} else if (numbers[mid] <= numbers[right]) {
17-
right = mid;
18-
}
19-
}
20-
return numbers[right];
21-
}
22-
23-
private int findMin(int[] numbers, int left, int right) {
24-
int min = numbers[left];
25-
for (int i = left + 1; i < right; ++i) {
26-
if (min > numbers[i]) {
27-
min = numbers[i];
3+
int l = 0, r = numbers.length - 1;
4+
while (l < r) {
5+
int m = l + ((r - l) >> 1);
6+
if (numbers[m] > numbers[r]) {
7+
l = m + 1;
8+
} else if (numbers[m] < numbers[r]) {
9+
r = m;
10+
} else {
11+
--r;
2812
}
2913
}
30-
return min;
14+
return numbers[l];
3115
}
3216
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
class Solution:
22
def minArray(self, numbers: List[int]) -> int:
3-
if len(numbers) == 1 or numbers[0] < numbers[-1]:
4-
return numbers[0]
5-
left, right = 0, len(numbers) - 1
6-
while (right - left > 1):
7-
mid = left + ((right - left) >> 1)
8-
if numbers[mid] == numbers[left] == numbers[right]:
9-
return min(numbers[left: right + 1])
10-
if numbers[mid] >= numbers[left]:
11-
left = mid
12-
elif numbers[mid] <= numbers[right]:
13-
right = mid
14-
return numbers[right]
3+
l, r = 0, len(numbers) - 1
4+
while l < r:
5+
m = l + ((r - l) >> 1)
6+
if numbers[m] > numbers[r]:
7+
l = m + 1
8+
elif numbers[m] < numbers[r]:
9+
r = m
10+
else:
11+
r -= 1
12+
return numbers[l]

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

+28-2
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,41 @@
4141
<!-- 这里可写当前语言的特殊实现逻辑 -->
4242

4343
```python
44-
44+
class Solution:
45+
def findMin(self, nums: List[int]) -> int:
46+
l, r = 0, len(nums) - 1
47+
while l < r:
48+
m = l + ((r - l) >> 1)
49+
if nums[m] > nums[r]:
50+
l = m + 1
51+
elif nums[m] < nums[r]:
52+
r = m
53+
else:
54+
r -= 1
55+
return nums[l]
4556
```
4657

4758
### **Java**
4859

4960
<!-- 这里可写当前语言的特殊实现逻辑 -->
5061

5162
```java
52-
63+
class Solution {
64+
public int findMin(int[] nums) {
65+
int l = 0, r = nums.length - 1;
66+
while (l < r) {
67+
int m = l + ((r - l) >> 1);
68+
if (nums[m] > nums[r]) {
69+
l = m + 1;
70+
} else if (nums[m] < nums[r]) {
71+
r = m;
72+
} else {
73+
--r;
74+
}
75+
}
76+
return nums[l];
77+
}
78+
}
5379
```
5480

5581
### **...**

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

+28-2
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,39 @@
4242
### **Python3**
4343

4444
```python
45-
45+
class Solution:
46+
def findMin(self, nums: List[int]) -> int:
47+
l, r = 0, len(nums) - 1
48+
while l < r:
49+
m = l + ((r - l) >> 1)
50+
if nums[m] > nums[r]:
51+
l = m + 1
52+
elif nums[m] < nums[r]:
53+
r = m
54+
else:
55+
r -= 1
56+
return nums[l]
4657
```
4758

4859
### **Java**
4960

5061
```java
51-
62+
class Solution {
63+
public int findMin(int[] nums) {
64+
int l = 0, r = nums.length - 1;
65+
while (l < r) {
66+
int m = l + ((r - l) >> 1);
67+
if (nums[m] > nums[r]) {
68+
l = m + 1;
69+
} else if (nums[m] < nums[r]) {
70+
r = m;
71+
} else {
72+
--r;
73+
}
74+
}
75+
return nums[l];
76+
}
77+
}
5278
```
5379

5480
### **...**
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
class Solution {
22
public int findMin(int[] nums) {
3-
int left = 0 , right = nums.length - 1;
4-
while(left < right){
5-
int mid = left + (right - left) / 2;
6-
if(nums[left] > nums[mid]){
7-
left++;
8-
right = mid;
9-
}else if(nums[mid] > nums[right]) left = mid + 1;
10-
else right--;
3+
int l = 0, r = nums.length - 1;
4+
while (l < r) {
5+
int m = l + ((r - l) >> 1);
6+
if (nums[m] > nums[r]) {
7+
l = m + 1;
8+
} else if (nums[m] < nums[r]) {
9+
r = m;
10+
} else {
11+
--r;
12+
}
1113
}
12-
return nums[left];
14+
return nums[l];
1315
}
1416
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class Solution:
2+
def findMin(self, nums: List[int]) -> int:
3+
l, r = 0, len(nums) - 1
4+
while l < r:
5+
m = l + ((r - l) >> 1)
6+
if nums[m] > nums[r]:
7+
l = m + 1
8+
elif nums[m] < nums[r]:
9+
r = m
10+
else:
11+
r -= 1
12+
return nums[l]

0 commit comments

Comments
 (0)