Skip to content

Commit e71e993

Browse files
authored
feat: add swift implementation to lcci problem: No.10.03 (#2713)
1 parent 2d240b6 commit e71e993

File tree

3 files changed

+99
-0
lines changed

3 files changed

+99
-0
lines changed

lcci/10.03.Search Rotate Array/README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,40 @@ function search(arr: number[], target: number): number {
187187
}
188188
```
189189

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+
190224
<!-- tabs:end -->
191225

192226
<!-- end -->

lcci/10.03.Search Rotate Array/README_EN.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,40 @@ function search(arr: number[], target: number): number {
193193
}
194194
```
195195

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+
196230
<!-- tabs:end -->
197231

198232
<!-- end -->
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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+
}

0 commit comments

Comments
 (0)