444. Sequence Reconstruction
Posted jxr041100
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了444. Sequence Reconstruction相关的知识,希望对你有一定的参考价值。
Check whether the original sequence org
can be uniquely reconstructed from the sequences in seqs
. The org
sequence is a permutation of the integers from 1 to n, with 1 ≤ n ≤ 104. Reconstruction means building a shortest common supersequence of the sequences in seqs
(i.e., a shortest sequence so that all sequences in seqs
are subsequences of it). Determine whether there is only one sequence that can be reconstructed from seqs
and it is the org
sequence.
Example 1:
Input: org: [1,2,3], seqs: [[1,2],[1,3]] Output: false Explanation: [1,2,3] is not the only one sequence that can be reconstructed, because [1,3,2] is also a valid sequence that can be reconstructed.
Example 2:
Input: org: [1,2,3], seqs: [[1,2]] Output: false Explanation: The reconstructed sequence can only be [1,2].
class Solution { public: bool sequenceReconstruction(vector<int>& org, vector<vector<int>>& seqs) { if (seqs.empty()) return false; int n = org.size(), cnt = n - 1; vector<int> pos(n + 1, 0), flags(n + 1, 0); bool existed = false; for (int i = 0; i < n; ++i) pos[org[i]] = i; for (auto& seq : seqs) { for (int i = 0; i < seq.size(); ++i) { existed = true; if (seq[i] <= 0 || seq[i] > n) return false; if (i == 0) continue; int pre = seq[i - 1], cur = seq[i]; if (pos[pre] >= pos[cur]) return false; if (flags[cur] == 0 && pos[pre] + 1 == pos[cur]) { flags[cur] = 1; --cnt; } } } return cnt == 0 && existed; } };
以上是关于444. Sequence Reconstruction的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Reconstruct Itinerary