整数の配列はほとんどありません。各配列の要素は順序付けられています。配列には重複がありません。
結果の配列には、すべての配列に存在する要素のみが含まれるように、すべての配列を 1 つに結合する必要があります。
たとえば、私は配列を持っています
(1,2,3,4,5) (2,3,5) (1,2,4,5)
結果は (2,5) でなければなりません
最高のパフォーマンスを達成するための最善の方法は何ですか?
整数の配列はほとんどありません。各配列の要素は順序付けられています。配列には重複がありません。
結果の配列には、すべての配列に存在する要素のみが含まれるように、すべての配列を 1 つに結合する必要があります。
たとえば、私は配列を持っています
(1,2,3,4,5) (2,3,5) (1,2,4,5)
結果は (2,5) でなければなりません
最高のパフォーマンスを達成するための最善の方法は何ですか?
配列に多くの異なる数値が含まれていると予想され、それらすべてに存在するのはごくわずかである場合、
length(intersection)*log(length(array)) >= length(array)
ますarray
。最悪の場合の複雑さは O(sum(lengths)) です。運が良ければ、 を回避できます。k * sum(log(length))
ここk
で、 は交差する要素の数です。
これはうまくいくはずです:
これは、配列が数値の複数のインスタンスを含むことができる場合にも機能するはずです。たとえば、配列 (1,1,2,2)、(2,2,3,3) は (2,2) になります。
これが私の考えHashMap<Integer, Integer>
ですnumer->hits
。すべての配列を反復します:
結局、number->count
1->1
2->3
3->2
4->2
5->3
したがって、HashMap を繰り返し処理して if(value==arrays.lenth) を出力します。
したがって、スペースは O(N) および O(N) ステップです。
ハッシュマップのアクセスは一定時間です(yahoooooo)。