2 つの配列があるとします。
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
両方のインデックスがタプルより低いか高い場合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)