Skip to content

Commit de44998

Browse files
committed
Swift implementation for LCOF 41
1 parent d36bce4 commit de44998

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed

lcof/面试题41. 数据流中的中位数/README.md

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,44 @@ public class MedianFinder {
412412
*/
413413
```
414414

415+
#### Swift
416+
417+
```swift
418+
class MedianFinder {
419+
private var lowerHalf = [Int]()
420+
private var upperHalf = [Int]()
421+
422+
init() {}
423+
424+
func addNum(_ num: Int) {
425+
if lowerHalf.count > upperHalf.count {
426+
lowerHalf.append(num)
427+
lowerHalf.sort(by: >)
428+
upperHalf.append(lowerHalf.removeFirst())
429+
} else {
430+
upperHalf.append(num)
431+
upperHalf.sort()
432+
lowerHalf.append(upperHalf.removeFirst())
433+
}
434+
}
435+
436+
func findMedian() -> Double {
437+
if lowerHalf.count > upperHalf.count {
438+
return Double(lowerHalf.first!)
439+
} else {
440+
return (Double(lowerHalf.first!) + Double(upperHalf.first!)) / 2.0
441+
}
442+
}
443+
}
444+
445+
/**
446+
* Your MedianFinder object will be instantiated and called as such:
447+
* let obj = MedianFinder();
448+
* obj.addNum(num);
449+
* let param_2 = obj.findMedian();
450+
*/
451+
```
452+
415453
<!-- tabs:end -->
416454

417455
<!-- solution:end -->
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class MedianFinder {
2+
private var lowerHalf = [Int]()
3+
private var upperHalf = [Int]()
4+
5+
init() {}
6+
7+
func addNum(_ num: Int) {
8+
if lowerHalf.count > upperHalf.count {
9+
lowerHalf.append(num)
10+
lowerHalf.sort(by: >)
11+
upperHalf.append(lowerHalf.removeFirst())
12+
} else {
13+
upperHalf.append(num)
14+
upperHalf.sort()
15+
lowerHalf.append(upperHalf.removeFirst())
16+
}
17+
}
18+
19+
func findMedian() -> Double {
20+
if lowerHalf.count > upperHalf.count {
21+
return Double(lowerHalf.first!)
22+
} else {
23+
return (Double(lowerHalf.first!) + Double(upperHalf.first!)) / 2.0
24+
}
25+
}
26+
}
27+
28+
/**
29+
* Your MedianFinder object will be instantiated and called as such:
30+
* let obj = MedianFinder();
31+
* obj.addNum(num);
32+
* let param_2 = obj.findMedian();
33+
*/

0 commit comments

Comments
 (0)