444. Sequence Reconstruction
題目網址:https://leetcode.cn/problems/sequence-reconstruction/
題意:給一
[1, n]長度為n的整數 arraynums, 以及一些 2d 整數 arraysequences, 其中sequences[i]是nums的 subsequence。返回
sequences是否能唯一重建出nums。e.g.
nums = [1,2,3],sequences = [[1,2], [1,3]]
sequences可重建出[1,2,3]和[1,3,2]並不唯一, 故返回false。因為 1 必須在 2、3 的前面, 但 2 和 3 間並沒有唯一的順序- 但若更改
sequences = [[1,2], [1,3], [2,3]], 則可唯一重建出[1,2,3], 故返回true。因為 1 必須在 2、3 的前面, 且 2 必須在 3 的前面, 故只能重建出[1,2,3]

Solution:
想法:利用 Topological Sort + BFS, 將
sequences轉成有向圖, 給定的順序nums等價於有向圖的 Topological Sort
- 首先, 計算每個點的
inDegree- 將所有
inDegree = 0的 node 加到queue中, 並進行 Topological Sortqueue中的元素個數表示可以作為下一個數字的元素個數
- 若
queue中的元素個數> 1, 則下一個數字並不唯一, 應返回false- 若
queue中的元素個數= 1, 則下一個數字是唯一的數字。並將該數字從queue取出, 且該數字指向的每個數字的inDegree - 1, 並將inDegree變成0的數字加到queue中
class Solution { |
- time:$O(n+m)$ ➔
bfs()所需的時間複雜度 $O(V+E)$n為nums的個數(即為 vertex 數)m為sequences的個數(即為 edge 數)
- space:$O(n+m)$ ➔ 因為
adj為 $O(V + E)$,V是因為要記錄所有點,E是因為會記錄所有邊
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論