Skip to content

Commit b851beb

Browse files
authoredOct 30, 2024··
feat: add swift implementation to lcof2 problem: No.115 (#3693)
1 parent 515b1fc commit b851beb

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed
 

‎lcof2/剑指 Offer II 115. 重建序列/README.md

+40
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,46 @@ function sequenceReconstruction(nums: number[], sequences: number[][]): boolean
250250
}
251251
```
252252

253+
#### Swift
254+
255+
```swift
256+
class Solution {
257+
func sequenceReconstruction(_ nums: [Int], _ sequences: [[Int]]) -> Bool {
258+
let n = nums.count
259+
var indegree = [Int](repeating: 0, count: n)
260+
var graph = Array(repeating: [Int](), count: n)
261+
262+
for sequence in sequences {
263+
for i in 1..<sequence.count {
264+
let a = sequence[i - 1] - 1
265+
let b = sequence[i] - 1
266+
graph[a].append(b)
267+
indegree[b] += 1
268+
}
269+
}
270+
271+
var queue = [Int]()
272+
for i in 0..<n {
273+
if indegree[i] == 0 {
274+
queue.append(i)
275+
}
276+
}
277+
278+
while queue.count == 1 {
279+
let i = queue.removeFirst()
280+
for neighbor in graph[i] {
281+
indegree[neighbor] -= 1
282+
if indegree[neighbor] == 0 {
283+
queue.append(neighbor)
284+
}
285+
}
286+
}
287+
288+
return queue.isEmpty
289+
}
290+
}
291+
```
292+
253293
<!-- tabs:end -->
254294

255295
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class Solution {
2+
func sequenceReconstruction(_ nums: [Int], _ sequences: [[Int]]) -> Bool {
3+
let n = nums.count
4+
var indegree = [Int](repeating: 0, count: n)
5+
var graph = Array(repeating: [Int](), count: n)
6+
7+
for sequence in sequences {
8+
for i in 1..<sequence.count {
9+
let a = sequence[i - 1] - 1
10+
let b = sequence[i] - 1
11+
graph[a].append(b)
12+
indegree[b] += 1
13+
}
14+
}
15+
16+
var queue = [Int]()
17+
for i in 0..<n {
18+
if indegree[i] == 0 {
19+
queue.append(i)
20+
}
21+
}
22+
23+
while queue.count == 1 {
24+
let i = queue.removeFirst()
25+
for neighbor in graph[i] {
26+
indegree[neighbor] -= 1
27+
if indegree[neighbor] == 0 {
28+
queue.append(neighbor)
29+
}
30+
}
31+
}
32+
33+
return queue.isEmpty
34+
}
35+
}

0 commit comments

Comments
 (0)
Please sign in to comment.