![]() |
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的最小顶点是最大可能的。
|
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |