列表交集
|
我想计算一个列表“交叉点”。问题是:
L1 = [1, 0, 2, 3, 1 , 3, 0, 5]
L2 = [3, 5]
那么结果将是
L3 = [0, 0, 0, 1, 0, 1, 0, 1]
然后我将这个结果转换为一个字节。在这种情况下,十进制格式将为21。
我想用delphi制作,我需要高效地做。有没有比O(m * n)更好地解决此问题的方法?
没有找到相关结果
已邀请:
3 个回复
俺呵誓放胳
定义为集合而不是数组,因为您说过所有值都将适合
。它的复杂度是O(n);检查集成员身份以恒定时间运行。但是由于结果需要适合一个字节,因此
的长度必须限制为8,因此此函数的复杂度实际上为O(1)。
贸会
可以通过更改“适当地处理此”位置为一整套任务(包括列表交集)进行自定义,并且保证运行的步骤不会超过两个列表的总和。对于列表交集,在等号的情况下将值添加到某些输出中,而其他两个则除了增加计数器外什么都不做,您可以省略可选的清除操作。 使用此算法的一种方法是使顶部的多余参数成为函数指针,并传入可处理适当情况的例程,或者不执行任何操作则为nil。 (只要走那条路,确保在调用nil之前先检查nil!)这样,您只需编写一次基本代码即可。
席酱