说我有这个整数列表:
清单A = 3 5 9 10 11 15
说我还有其他几个整数列表:
清单B1 = 1 2 3 4 5 6 7 8 20 25
清单B2 = 4 7 8 13 17
清单B3 = 10 11 12 13 14 15 16 17
注意:
是否有任何算法:
我想这是一个经典的需求...
ps:我更喜欢.py代码,但伪代码没问题
非常感谢
答案 0 :(得分:0)
以下步骤将会这样做
1) Store the gaps of A, in an array.
2) Then Map each element of A With different B(B1,B2,..)
3) And then display the result, based on the result in the above step
这是一种解决这个问题的蛮力方法。
答案 1 :(得分:0)
我会在A和B的排序数组上使用两个迭代器。第一个遍历A,第二个遍历B.每当A中存在间隙时,B中的下一个数字必须填充它。像这样(C#中的例子):
var iterA = A.Sort().GetEnumerator();
var iterB = B.Sort().GetEnumerator();
iterA.MoveNext(); iterB.MoveNext();
var prevA = iterA.Current;
var curB = iterB.Current;
if (curB < prevA) return "B is fat";
while (iterA.MoveNext()) {
var curA = iterA.Current;
if (curA - prevA == 1) {
prevA = curA;
continue; // no gap
}
while (curA - prevA > 1) {
if (curB != prevA + 1) return "B does not fill gap";
if (iterB.MoveNext()) {
curB = iterB.Current;
prevA++;
} else return "B does not fill gap";
}
prevA = curA;
}
运行时复杂度为线性O(N),N为min(A)和max(A)之间的数字。这只是一个示例,可以让您了解如何解决此问题。我不保证这个算法的正确性,我没有编译或测试它。我不知道python,但我认为它确实提供了类似于C#的迭代器。