File tree 4 files changed +106
-14
lines changed
solution/0000-0099/0081.Search in Rotated Sorted Array II
4 files changed +106
-14
lines changed Original file line number Diff line number Diff line change 33
33
34
34
<!-- 这里可写通用的实现逻辑 -->
35
35
36
+ 二分查找。
37
+
36
38
<!-- tabs:start -->
37
39
38
40
### ** Python3**
39
41
40
42
<!-- 这里可写当前语言的特殊实现逻辑 -->
41
43
42
44
``` 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
44
65
```
45
66
46
67
### ** Java**
47
68
48
69
<!-- 这里可写当前语言的特殊实现逻辑 -->
49
70
50
71
``` 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
+ }
52
89
```
53
90
54
91
### ** C++**
Original file line number Diff line number Diff line change 42
42
### ** Python3**
43
43
44
44
``` 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
46
65
```
47
66
48
67
### ** Java**
49
68
50
69
``` 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
+ }
52
87
```
53
88
54
89
### ** C++**
Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
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 ;
6
6
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 --;
14
14
}
15
15
return false ;
16
16
}
Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments