给定两个数组:
2 5 6 4 3 7 1
5 1 6 2 3 7 4
计算两个数组x, y
中满足x
之前条件的元素个数。y
目前进展:
按索引对数组进行排序。例如,这将是:
object: 1 2 3 4 5 6 7
indexes in the first array: 6 0 4 3 1 2 5
indexes in the secnod array: 1 3 4 6 0 2 5
并将每个元组与另一个元组进行比较。如果元组a
的两个索引都低于或高于 tuple b
,则增加满足条件的元素数。
这有(N^2)/2的时间复杂度,所以O(N^2),太慢了。我知道没有更好的最坏情况复杂性,但我最感兴趣的是平均结果。那么:有没有更好的方法/算法?
我想过使用传递属性(如果两者都(x,y)
满足(y,z)
条件,那么(x,z)
也满足它),但没有运气。
测试用例
对于数组:
2 5 6 4 3 7 1
5 1 6 2 3 7 4
满足条件的对是:
(5,1) (2,3) (2,4) (2,7) (5,3) (6,3) (3,7) (5,4) (6,4) (5,6) (5,7) (6,7)
对于数组:
1 2 3 4 5 6 7
1 2 3 4 5 6 7
满足条件的对是:
(1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (2,3) (2,4) (2,5) (2,6) (2,7) (3,4) (3,5) (3,6) (3,7) (4,5) (4,6) (4,7) (5,6) (5,7) (6,7)