Skip to content

Commit a0e4d94

Browse files
committed
feat: update leetcode solutions: No.0081
1 parent a192ad5 commit a0e4d94

File tree

4 files changed

+106
-14
lines changed

4 files changed

+106
-14
lines changed

solution/0000-0099/0081.Search in Rotated Sorted Array II/README.md

+39-2
Original file line numberDiff line numberDiff line change
@@ -33,22 +33,59 @@
3333

3434
<!-- 这里可写通用的实现逻辑 -->
3535

36+
二分查找。
37+
3638
<!-- tabs:start -->
3739

3840
### **Python3**
3941

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

4244
```python
43-
45+
class Solution:
46+
def search(self, nums: List[int], target: int) -> bool:
47+
l, r = 0, len(nums) - 1
48+
while l <= r:
49+
mid = (l + r) >> 1
50+
if nums[mid] == target:
51+
return True
52+
if nums[mid] < nums[r] or nums[mid] < nums[l]:
53+
if target > nums[mid] and target <= nums[r]:
54+
l = mid + 1
55+
else:
56+
r = mid - 1
57+
elif nums[mid] > nums[l] or nums[mid] > nums[r]:
58+
if target < nums[mid] and target >= nums[l]:
59+
r = mid - 1
60+
else:
61+
l = mid + 1
62+
else:
63+
r -= 1
64+
return False
4465
```
4566

4667
### **Java**
4768

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

5071
```java
51-
72+
class Solution {
73+
public boolean search(int[] nums, int target) {
74+
int l = 0, r = nums.length - 1;
75+
while (l <= r) {
76+
int mid = (l + r) >>> 1;
77+
if (nums[mid] == target) return true;
78+
if (nums[mid] < nums[r] || nums[mid] < nums[l]) {
79+
if (target > nums[mid] && target <= nums[r]) l = mid + 1;
80+
else r = mid - 1;
81+
} else if (nums[mid] > nums[l] || nums[mid] > nums[r]) {
82+
if (target < nums[mid] && target >= nums[l]) r = mid - 1;
83+
else l = mid + 1;
84+
} else r--;
85+
}
86+
return false;
87+
}
88+
}
5289
```
5390

5491
### **C++**

solution/0000-0099/0081.Search in Rotated Sorted Array II/README_EN.md

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

4444
```python
45-
45+
class Solution:
46+
def search(self, nums: List[int], target: int) -> bool:
47+
l, r = 0, len(nums) - 1
48+
while l <= r:
49+
mid = (l + r) >> 1
50+
if nums[mid] == target:
51+
return True
52+
if nums[mid] < nums[r] or nums[mid] < nums[l]:
53+
if target > nums[mid] and target <= nums[r]:
54+
l = mid + 1
55+
else:
56+
r = mid - 1
57+
elif nums[mid] > nums[l] or nums[mid] > nums[r]:
58+
if target < nums[mid] and target >= nums[l]:
59+
r = mid - 1
60+
else:
61+
l = mid + 1
62+
else:
63+
r -= 1
64+
return False
4665
```
4766

4867
### **Java**
4968

5069
```java
51-
70+
class Solution {
71+
public boolean search(int[] nums, int target) {
72+
int l = 0, r = nums.length - 1;
73+
while (l <= r) {
74+
int mid = (l + r) >>> 1;
75+
if (nums[mid] == target) return true;
76+
if (nums[mid] < nums[r] || nums[mid] < nums[l]) {
77+
if (target > nums[mid] && target <= nums[r]) l = mid + 1;
78+
else r = mid - 1;
79+
} else if (nums[mid] > nums[l] || nums[mid] > nums[r]) {
80+
if (target < nums[mid] && target >= nums[l]) r = mid - 1;
81+
else l = mid + 1;
82+
} else r--;
83+
}
84+
return false;
85+
}
86+
}
5287
```
5388

5489
### **C++**

solution/0000-0099/0081.Search in Rotated Sorted Array II/Solution.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
class Solution {
22
public boolean search(int[] nums, int target) {
3-
int start = 0, end = nums.length - 1, mid;
4-
while(start <= end) {
5-
mid = (start + end) / 2;
3+
int l = 0, r = nums.length - 1;
4+
while (l <= r) {
5+
int mid = (l + r) >>> 1;
66
if (nums[mid] == target) return true;
7-
if (nums[mid] < nums[end] || nums[mid] < nums[start]) {
8-
if (target > nums[mid] && target <= nums[end]) start = mid + 1;
9-
else end = mid - 1;
10-
} else if (nums[mid] > nums[start] || nums[mid] > nums[end]) {
11-
if (target < nums[mid] && target >= nums[start]) end = mid - 1;
12-
else start = mid + 1;
13-
} else end--;
7+
if (nums[mid] < nums[r] || nums[mid] < nums[l]) {
8+
if (target > nums[mid] && target <= nums[r]) l = mid + 1;
9+
else r = mid - 1;
10+
} else if (nums[mid] > nums[l] || nums[mid] > nums[r]) {
11+
if (target < nums[mid] && target >= nums[l]) r = mid - 1;
12+
else l = mid + 1;
13+
} else r--;
1414
}
1515
return false;
1616
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution:
2+
def search(self, nums: List[int], target: int) -> bool:
3+
l, r = 0, len(nums) - 1
4+
while l <= r:
5+
mid = (l + r) >> 1
6+
if nums[mid] == target:
7+
return True
8+
if nums[mid] < nums[r] or nums[mid] < nums[l]:
9+
if target > nums[mid] and target <= nums[r]:
10+
l = mid + 1
11+
else:
12+
r = mid - 1
13+
elif nums[mid] > nums[l] or nums[mid] > nums[r]:
14+
if target < nums[mid] and target >= nums[l]:
15+
r = mid - 1
16+
else:
17+
l = mid + 1
18+
else:
19+
r -= 1
20+
return False

0 commit comments

Comments
 (0)