File tree 4 files changed +102
-16
lines changed
solution/0000-0099/0033.Search in Rotated Sorted Array
4 files changed +102
-16
lines changed Original file line number Diff line number Diff line change 30
30
31
31
<!-- 这里可写通用的实现逻辑 -->
32
32
33
+ 二分查找。
34
+
33
35
<!-- tabs:start -->
34
36
35
37
### ** Python3**
36
38
37
39
<!-- 这里可写当前语言的特殊实现逻辑 -->
38
40
39
41
``` python
40
-
42
+ class Solution :
43
+ def search (self , nums : List[int ], target : int ) -> int :
44
+ l, r = 0 , len (nums) - 1
45
+ while l <= r:
46
+ mid = (l + r) >> 1
47
+ if nums[mid] == target:
48
+ return mid
49
+ if nums[mid] > target:
50
+ if nums[mid] >= nums[r] and target < nums[l]:
51
+ l = mid + 1
52
+ else :
53
+ r = mid - 1
54
+ else :
55
+ if nums[mid] <= nums[l] and target > nums[r]:
56
+ r = mid - 1
57
+ else :
58
+ l = mid + 1
59
+ return - 1
41
60
```
42
61
43
62
### ** Java**
44
63
45
64
<!-- 这里可写当前语言的特殊实现逻辑 -->
46
65
47
66
``` java
48
-
67
+ class Solution {
68
+ public int search (int [] nums , int target ) {
69
+ int l = 0 , r = nums. length - 1 ;
70
+ while (l <= r) {
71
+ int mid = (l + r) >>> 1 ;
72
+ if (nums[mid] == target) return mid;
73
+ if (nums[mid] > target) {
74
+ if (nums[mid] >= nums[r] && target < nums[l]) l = mid + 1 ;
75
+ else r = mid - 1 ;
76
+ } else {
77
+ if (nums[mid] <= nums[l] && target > nums[r]) r = mid - 1 ;
78
+ else l = mid + 1 ;
79
+ }
80
+ }
81
+ return - 1 ;
82
+ }
83
+ }
49
84
```
50
85
51
86
### ** C++**
Original file line number Diff line number Diff line change 39
39
### ** Python3**
40
40
41
41
``` python
42
-
42
+ class Solution :
43
+ def search (self , nums : List[int ], target : int ) -> int :
44
+ l, r = 0 , len (nums) - 1
45
+ while l <= r:
46
+ mid = (l + r) >> 1
47
+ if nums[mid] == target:
48
+ return mid
49
+ if nums[mid] > target:
50
+ if nums[mid] >= nums[r] and target < nums[l]:
51
+ l = mid + 1
52
+ else :
53
+ r = mid - 1
54
+ else :
55
+ if nums[mid] <= nums[l] and target > nums[r]:
56
+ r = mid - 1
57
+ else :
58
+ l = mid + 1
59
+ return - 1
43
60
```
44
61
45
62
### ** Java**
46
63
47
64
``` java
48
-
65
+ class Solution {
66
+ public int search (int [] nums , int target ) {
67
+ int l = 0 , r = nums. length - 1 ;
68
+ while (l <= r) {
69
+ int mid = (l + r) >>> 1 ;
70
+ if (nums[mid] == target) return mid;
71
+ if (nums[mid] > target) {
72
+ if (nums[mid] >= nums[r] && target < nums[l]) l = mid + 1 ;
73
+ else r = mid - 1 ;
74
+ } else {
75
+ if (nums[mid] <= nums[l] && target > nums[r]) r = mid - 1 ;
76
+ else l = mid + 1 ;
77
+ }
78
+ }
79
+ return - 1 ;
80
+ }
81
+ }
49
82
```
50
83
51
84
### ** C++**
Original file line number Diff line number Diff line change 1
1
class Solution {
2
- public int search (int [] A , int target ) {
3
- if ( A == null || A .length == 0 ) return - 1 ;
4
- int low = 0 , high = A . length - 1 ;
5
- while ( low <= high ) {
6
- int mid = ( low + high ) >>> 1 ;
7
- if (target < A [mid ]) {
8
- if (A [mid ] >= A [ high ] && target < A [ low ]) low = mid + 1 ;
9
- else high = mid - 1 ;
10
- } else if ( target > A [ mid ]) {
11
- if (A [ low ] >= A [ mid ] && target > A [ high ]) high = mid - 1 ;
12
- else low = mid + 1 ;
13
- } else return mid ;
2
+ public int search (int [] nums , int target ) {
3
+ int l = 0 , r = nums .length - 1 ;
4
+ while ( l <= r ) {
5
+ int mid = ( l + r ) >>> 1 ;
6
+ if ( nums [ mid ] == target ) return mid ;
7
+ if (nums [mid ] > target ) {
8
+ if (nums [mid ] >= nums [ r ] && target < nums [ l ]) l = mid + 1 ;
9
+ else r = mid - 1 ;
10
+ } else {
11
+ if (nums [ mid ] <= nums [ l ] && target > nums [ r ]) r = mid - 1 ;
12
+ else l = mid + 1 ;
13
+ }
14
14
}
15
15
return -1 ;
16
16
}
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def search (self , nums : List [int ], target : int ) -> int :
3
+ l , r = 0 , len (nums ) - 1
4
+ while l <= r :
5
+ mid = (l + r ) >> 1
6
+ if nums [mid ] == target :
7
+ return mid
8
+ if nums [mid ] > target :
9
+ if nums [mid ] >= nums [r ] and target < nums [l ]:
10
+ l = mid + 1
11
+ else :
12
+ r = mid - 1
13
+ else :
14
+ if nums [mid ] <= nums [l ] and target > nums [r ]:
15
+ r = mid - 1
16
+ else :
17
+ l = mid + 1
18
+ return - 1
You can’t perform that action at this time.
0 commit comments