37
37
<!-- 这里可写当前语言的特殊实现逻辑 -->
38
38
39
39
``` python
40
-
40
+ class Solution :
41
+ def findMagicIndex (self , nums : List[int ]) -> int :
42
+ def find (nums , left , right ):
43
+ if left > right:
44
+ return - 1
45
+ mid = (left + right) >> 1
46
+ left_index = find(nums, left, mid - 1 )
47
+ if left_index != - 1 :
48
+ return left_index
49
+ if nums[mid] == mid:
50
+ return mid
51
+ return find(nums, mid + 1 , right)
52
+
53
+ return find(nums, 0 , len (nums) - 1 )
41
54
```
42
55
43
56
### ** Java**
44
57
45
58
<!-- 这里可写当前语言的特殊实现逻辑 -->
46
59
47
60
``` java
48
-
61
+ class Solution {
62
+ public int findMagicIndex (int [] nums ) {
63
+ int left = 0 , right = nums. length - 1 ;
64
+ return find(nums, left, right);
65
+ }
66
+
67
+ private int find (int [] nums , int left , int right ) {
68
+ if (left > right) {
69
+ return - 1 ;
70
+ }
71
+ int mid = (left + right) >> 1 ;
72
+ int leftIndex = find(nums, left, mid - 1 );
73
+ if (leftIndex != - 1 ) {
74
+ return leftIndex;
75
+ }
76
+ if (nums[mid] == mid) {
77
+ return mid;
78
+ }
79
+ return find(nums, mid + 1 , right);
80
+ }
81
+ }
49
82
```
50
83
51
84
### ** JavaScript**
@@ -69,6 +102,55 @@ function helper(nums, left, right) {
69
102
}
70
103
```
71
104
105
+ ### ** C++**
106
+
107
+ ``` cpp
108
+ class Solution {
109
+ public:
110
+ int findMagicIndex(vector<int >& nums) {
111
+ return find(nums, 0, nums.size() - 1);
112
+ }
113
+
114
+ int find(vector<int>& nums, int left, int right) {
115
+ if (left > right) {
116
+ return -1;
117
+ }
118
+ int mid = left + right >> 1 ;
119
+ int leftIndex = find(nums, left, mid - 1 );
120
+ if (leftIndex != -1 ) {
121
+ return leftIndex;
122
+ }
123
+ if (nums[mid] == mid) {
124
+ return mid;
125
+ }
126
+ return find(nums, mid + 1, right);
127
+ }
128
+ };
129
+ ```
130
+
131
+ ### ** Go**
132
+
133
+ ``` go
134
+ func findMagicIndex (nums []int ) int {
135
+ return find (nums, 0 , len (nums)-1 )
136
+ }
137
+
138
+ func find (nums []int , left , right int ) int {
139
+ if left > right {
140
+ return -1
141
+ }
142
+ mid := (left + right) >> 1
143
+ leftIndex := find (nums, left, mid-1 )
144
+ if leftIndex != -1 {
145
+ return leftIndex
146
+ }
147
+ if nums[mid] == mid {
148
+ return mid
149
+ }
150
+ return find (nums, mid+1 , right)
151
+ }
152
+ ```
153
+
72
154
### ** ...**
73
155
74
156
```
0 commit comments