LeetCode 444. 序列重建(拓扑排序)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 444. 序列重建(拓扑排序)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
驗證原始的序列 org 是否可以從序列集 seqs 中唯一地重建。
序列 org 是 1 到 n 整數的排列,其中 1 ≤ n ≤ 104。
重建是指在序列集 seqs 中構建最短的公共超序列。(即使得所有 seqs 中的序列都是該最短序列的子序列)。
確定是否只可以從 seqs 重建唯一的序列,且該序列就是 org 。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sequence-reconstruction
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
class Solution { public:bool sequenceReconstruction(vector<int>& org, vector<vector<int>>& seqs) {int n = org.size();vector<bool> exit(n+1, false);//是否存在vector<vector<int>> g(n+1);//圖vector<int> indegree(n+1, 0);//入度for(auto& s : seqs){int from = -1;for(int i = 0; i < s.size(); ++i){if(s[i] <= 0 || s[i] > n) return false;//編號超了exit[s[i]] = true;if(from != -1){g[from].push_back(s[i]);//邊indegree[s[i]]++;//入度+1}from = s[i];}}queue<int> q;for(int i = 1; i <= n; ++i){if(!exit[i]) return false;//有的點不存在if(indegree[i]==0)//入度為0的入隊q.push(i);}int i = 0;while(!q.empty()){if(q.size() != 1) return false;//選擇不唯一int cur = q.front();if(cur != org[i++]) return false;//跟序列不匹配q.pop();for(int i = 0; i < g[cur].size(); ++i){if(--indegree[g[cur][i]] == 0)q.push(g[cur][i]);//入隊為0 的入隊}}if(i != n) return false;//有環return true;} };216 ms 45.2 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 444. 序列重建(拓扑排序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1031. 两个非重叠
- 下一篇: LeetCode 486. 预测赢家(博