File tree Expand file tree Collapse file tree 3 files changed +99
-0
lines changed
lcci/10.03.Search Rotate Array Expand file tree Collapse file tree 3 files changed +99
-0
lines changed Original file line number Diff line number Diff line change @@ -187,6 +187,40 @@ function search(arr: number[], target: number): number {
187
187
}
188
188
```
189
189
190
+ ``` swift
191
+ class Solution {
192
+ func search (_ arr : [Int ], _ target : Int ) -> Int {
193
+ var l = 0
194
+ var r = arr.count - 1
195
+
196
+ while arr[l] == arr[r] && l < r {
197
+ r -= 1
198
+ }
199
+
200
+ while l < r {
201
+ let mid = (l + r) >> 1
202
+ if arr[mid] > arr[r] {
203
+ if arr[l] <= target && target <= arr[mid] {
204
+ r = mid
205
+ } else {
206
+ l = mid + 1
207
+ }
208
+ } else if arr[mid] < arr[r] {
209
+ if arr[mid] < target && target <= arr[r] {
210
+ l = mid + 1
211
+ } else {
212
+ r = mid
213
+ }
214
+ } else {
215
+ r -= 1
216
+ }
217
+ }
218
+
219
+ return arr[l] == target ? l : -1
220
+ }
221
+ }
222
+ ```
223
+
190
224
<!-- tabs: end -->
191
225
192
226
<!-- end -->
Original file line number Diff line number Diff line change @@ -193,6 +193,40 @@ function search(arr: number[], target: number): number {
193
193
}
194
194
```
195
195
196
+ ``` swift
197
+ class Solution {
198
+ func search (_ arr : [Int ], _ target : Int ) -> Int {
199
+ var l = 0
200
+ var r = arr.count - 1
201
+
202
+ while arr[l] == arr[r] && l < r {
203
+ r -= 1
204
+ }
205
+
206
+ while l < r {
207
+ let mid = (l + r) >> 1
208
+ if arr[mid] > arr[r] {
209
+ if arr[l] <= target && target <= arr[mid] {
210
+ r = mid
211
+ } else {
212
+ l = mid + 1
213
+ }
214
+ } else if arr[mid] < arr[r] {
215
+ if arr[mid] < target && target <= arr[r] {
216
+ l = mid + 1
217
+ } else {
218
+ r = mid
219
+ }
220
+ } else {
221
+ r -= 1
222
+ }
223
+ }
224
+
225
+ return arr[l] == target ? l : -1
226
+ }
227
+ }
228
+ ```
229
+
196
230
<!-- tabs: end -->
197
231
198
232
<!-- end -->
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ func search( _ arr: [ Int ] , _ target: Int ) -> Int {
3
+ var l = 0
4
+ var r = arr. count - 1
5
+
6
+ while arr [ l] == arr [ r] && l < r {
7
+ r -= 1
8
+ }
9
+
10
+ while l < r {
11
+ let mid = ( l + r) >> 1
12
+ if arr [ mid] > arr [ r] {
13
+ if arr [ l] <= target && target <= arr [ mid] {
14
+ r = mid
15
+ } else {
16
+ l = mid + 1
17
+ }
18
+ } else if arr [ mid] < arr [ r] {
19
+ if arr [ mid] < target && target <= arr [ r] {
20
+ l = mid + 1
21
+ } else {
22
+ r = mid
23
+ }
24
+ } else {
25
+ r -= 1
26
+ }
27
+ }
28
+
29
+ return arr [ l] == target ? l : - 1
30
+ }
31
+ }
You can’t perform that action at this time.
0 commit comments