![]() |
1
1
如果对数组进行迭代并构建一个图,其中在a或b中遇到的每个唯一整数都成为一个顶点,并且每对整数a[i]和b[i]在两个顶点之间创建一条边,则该图最多有2×n个顶点,因此该图所占用的空间是线性到n的。 然后,对于图中的每一条边,我们将决定它的方向,即它连接的两个整数中的哪一个将在数组C中使用。最后,我们将再次对数组进行迭代,对于每对整数,我们查看图中相应的边,以了解要使用的整数。 我相信确定图中方向所需的操作都可以在线性时间到n之间进行(如果我错了,请纠正我),因此整个算法应该具有o(n)时间和空间复杂性。 确定图中边缘方向的规则如下:
当遍历数组并在图中查找相应的边时,标记两个顶点多重连接时已经使用的整数,以便第二次使用另一个整数。之后,您可以选择其中一个。 例子:
Graph:
我们发现循环[1>5>1]和[9>2>7>9]以及非循环子图中的最高整数8。 有向图:
结果:
第一个缺少的整数是8,因为我们必须牺牲它来保存[6,8,4]子图中的4和6。 |
![]() |
2
2
这个算法适用于
现在,这个问题相当于找到一种方法来指导边缘,这样,度为0的最小顶点是最大可能的。
|
![]() |
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 5 月前 |
![]() |
Alisa Petrova · 在有向图中更改一对顶点以创建循环 5 月前 |
![]() |
b39b332d · 使用C++标准库实现高效间隔存储 9 月前 |
![]() |
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 9 月前 |
![]() |
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 10 月前 |