LintCode 605 序列重构

孤街醉人 提交于 2020-02-15 10:19:51

原文首发自https://www.stdstring.com/2020/02/02/LintCode%20605%20%E5%BA%8F%E5%88%97%E9%87%8D%E6%9E%84/

题目描述

判断是否序列 org 能唯一地由 seqs重构得出. org是一个由从1到n的正整数排列而成的序列,1 ≤ n ≤ 10^4。 重构表示组合成seqs的一个最短的父序列 (意思是,一个最短的序列使得所有 seqs里的序列都是它的子序列).
判断是否有且仅有一个能从 seqs重构出来的序列,并且这个序列是org。

思路解析

这道题的关键之处在于理解“重构”的概念。拿下面的例子来说,对于seqs = [[1,2],[1,3],[2,3]]这三个子序列来说,必须同时满足这三个前后顺序,也就是说,这三个数组其实是给定了三个前后关系:

  • 1 必须在 2 的前面
  • 1 必须在 3 的前面
  • 2 必须在 3 的前面

这样,这道题就和课程表的题目非常相似了。所以,这道题目的关键也就是分层 BFS ,而且对于每一层,队列里的元素数目不能超过 1 个,也就是满足入度为 0 的元素最多只能有一个。因为假如同时有两个或以上元素满足入度为 0 的条件的话,此时就会有多个备选项可以选择,那么久不能满足“唯一”的要求了。

原文首发自https://www.stdstring.com/2020/02/02/LintCode%20605%20%E5%BA%8F%E5%88%97%E9%87%8D%E6%9E%84/

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!