File tree Expand file tree Collapse file tree 4 files changed +106
-14
lines changed
solution/0000-0099/0081.Search in Rotated Sorted Array II Expand file tree Collapse file tree 4 files changed +106
-14
lines changed Original file line number Diff line number Diff line change 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++**
Original file line number Diff line number Diff line change 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++**
Original file line number Diff line number Diff line change 11class 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 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