Skip to content

Commit 8f57d8a

Browse files
authored
feat: add swift implementation to lcp problem: No.52 (#3787)
1 parent 0e56c04 commit 8f57d8a

File tree

2 files changed

+109
-0
lines changed

2 files changed

+109
-0
lines changed

lcp/LCP 52. 二叉搜索树染色/README.md

+57
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,63 @@ class TreeSet<T = number> {
762762
}
763763
```
764764

765+
#### Swift
766+
767+
```swift
768+
/* public class TreeNode {
769+
* public var val: Int
770+
* public var left: TreeNode?
771+
* public var right: TreeNode?
772+
* public init() { self.val = 0; self.left = nil; self.right = nil; }
773+
* public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
774+
* public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
775+
* self.val = val
776+
* self.left = left
777+
* self.right = right
778+
* }
779+
* }
780+
*/
781+
782+
class Solution {
783+
private var treeValues: [Int] = []
784+
785+
func getNumber(_ root: TreeNode?, _ ops: [[Int]]) -> Int {
786+
collectValues(root)
787+
788+
treeValues.sort()
789+
790+
var ans = 0
791+
for op in ops.reversed() {
792+
let t = op[0]
793+
let x = op[1]
794+
let y = op[2]
795+
var indicesToRemove: [Int] = []
796+
797+
for i in 0..<treeValues.count {
798+
let val = treeValues[i]
799+
if val >= x && val <= y {
800+
indicesToRemove.append(i)
801+
ans += t
802+
}
803+
}
804+
805+
for index in indicesToRemove.reversed() {
806+
treeValues.remove(at: index)
807+
}
808+
}
809+
810+
return ans
811+
}
812+
813+
private func collectValues(_ root: TreeNode?) {
814+
guard let root = root else { return }
815+
treeValues.append(root.val)
816+
collectValues(root.left)
817+
collectValues(root.right)
818+
}
819+
}
820+
```
821+
765822
<!-- tabs:end -->
766823

767824
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/* public class TreeNode {
2+
* public var val: Int
3+
* public var left: TreeNode?
4+
* public var right: TreeNode?
5+
* public init() { self.val = 0; self.left = nil; self.right = nil; }
6+
* public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
7+
* public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
8+
* self.val = val
9+
* self.left = left
10+
* self.right = right
11+
* }
12+
* }
13+
*/
14+
15+
class Solution {
16+
private var treeValues: [Int] = []
17+
18+
func getNumber(_ root: TreeNode?, _ ops: [[Int]]) -> Int {
19+
collectValues(root)
20+
21+
treeValues.sort()
22+
23+
var ans = 0
24+
for op in ops.reversed() {
25+
let t = op[0]
26+
let x = op[1]
27+
let y = op[2]
28+
var indicesToRemove: [Int] = []
29+
30+
for i in 0..<treeValues.count {
31+
let val = treeValues[i]
32+
if val >= x && val <= y {
33+
indicesToRemove.append(i)
34+
ans += t
35+
}
36+
}
37+
38+
for index in indicesToRemove.reversed() {
39+
treeValues.remove(at: index)
40+
}
41+
}
42+
43+
return ans
44+
}
45+
46+
private func collectValues(_ root: TreeNode?) {
47+
guard let root = root else { return }
48+
treeValues.append(root.val)
49+
collectValues(root.left)
50+
collectValues(root.right)
51+
}
52+
}

0 commit comments

Comments
 (0)