3つの配列があり、各配列のサイズはN
です。 O [n^2]にのみA[i]+B[j]=C[k]
となる組み合わせを見つける。O [n^2]で3つの配列で結果A [i] + B [j] = C [k]を与えるすべての組み合わせを見つける
0
A
答えて
-1
更新:質問は後でJavaで実装するように特に修正されました。 Pythonのアルゴリズムと説明は有効なままですが、以下のJava実装も追加しました。
(平均)時間計算O(1)
とC
に存在するかどうかをテストするためにhashmap(またはセット)を使用。それから、すべてのペアを反復する必要があります。(a,b) | a <- A, b <- B
、合計時間複雑度はO(n^2)
です。例えば
c = set(C)
for a in A:
for b in B:
if a + b in c:
print a, b, a + b
クイックテスト:
>>> A = [1,2,3]
>>> B = [3,4,5]
>>> C = [1,4,7]
>>> c = set(C)
>>> for a in A:
... for b in B:
... if a + b in c:
... print a, b, a + b
...
1 3 4
2 5 7
3 4 7
あるいは、リスト内包と短いバージョン:
>>> c = set(C)
>>> [(a,b,a+b) for a in A for b in B if a+b in c]
[(1, 3, 4), (2, 5, 7), (3, 4, 7)]
Javaの実装は基本的に同じです。
import java.util.HashSet;
class Pairs {
public static void main(String[] args) {
Integer[] A = new Integer[]{1,2,3};
Integer[] B = new Integer[]{3,4,5};
Integer[] C = new Integer[]{1,4,7};
HashSet<Integer> c = new HashSet<Integer>();
for (int i = 0; i < C.length; i++) {
c.add(C[i]);
}
for (int i = 0; i < A.length; i++) {
for (int j = 0; j < B.length; j++) {
if (c.contains(A[i] + B[j])) {
System.out.format("%d %d %d%n", A[i], B[j], A[i]+B[j]);
}
}
}
}
}
0
単純な問題があります:指定された二つの配列及び数は合計を与えるアレイからのすべての組み合わせを見つけることが=番号をキー観察和A[i]+B[j]
がアレイC
に存在するかどうかをチェックするためのjava.util.HashSet
を使用することです。これはO(n)で解くことができます。
私たちは、大きい方のためのソリューションの一部として、そのソリューションを使用することができます。
(私はすべての要素が異なっていることを仮定している - それは物事ビットを簡素化します)あなたを行う
sort(A)
sort(B)
sort(C)
for(int indexC=0;indexC<N;++indexC)
int indexA=0
int indexB=N-1
while(indexA<0)
//find all combinations in A,B with sum=C[indexC]
int sum=A[indexA]+B[indexB]
if(sum==C[indexC])
OutputCombination(indexA,indexB,indexC)
if(sum<C[indexC])
++indexA
else if(sum>C[indexC])
--indexB
else
++indexA
--indexB
関連する問題
- 1. JavaScript配列の値のすべての組み合わせを見つける
- 2. 配列と組み合わせパターンの組み合わせを見つける
- 3. リストのすべての組み合わせを見つける
- 4. javascriptですべての組み合わせを見つける
- 5. C++で他のすべての組み合わせの最大値に合計する2つのベクトル配列の組み合わせを見つける
- 6. 配列の組み合わせの中点を見つける
- 7. すべての配列の組み合わせ、3つのレベルで停止C#
- 8. C#ドミノゲームで可能なすべての組み合わせを見つける
- 9. n要素の配列から3要素のすべての組み合わせを見つける
- 10. 見つからない組み合わせを見つける
- 11. 与えられた合計に達する数のすべての組み合わせを見つける
- 12. ターゲットの平均を与える数値のすべての組み合わせを見つける
- 13. grepと目的の結果を見つけるための組み合わせ
- 14. 最初の桁を見つけた後、2D配列内の正しい組み合わせを見つける
- 15. SQLクエリで配列に結果セットを組み合わせる
- 16. PHP:2つの値のすべての組み合わせを見つける
- 17. I、列によって、これらの3つのデータ・フレーム(すなわち、9つの組み合わせ)のすべての可能なペアの組合せをマージしたい複数のデータフレームのすべての可能な組み合わせを
- 18. クエリを組み合わせて結果を配列する
- 19. アレイにおいて(i、j)の対の合計数を見つけるよう私<j and a[i]> [J]配列で(i、j)の対の合計数を見つける必要がある、問題に言及したように
- 20. 未使用の組み合わせを見つける
- 21. 2次元配列の可能な組み合わせを見つける
- 22. 配列内の数値の組み合わせを見つける
- 23. 2つのnumpyの配列を組み合わせて、私は2つのnumpyの行列Aを有する
- 24. C#配列の組み合わせ
- 25. result [i] + = A [k] * sin(B [k] * C [i] + D [k])の組み込み命令がありますか?
- 26. 2つの合計結果を組み合わせる?
- 27. 列Bにテキスト文字列を見つけると、列Aを与えます
- 28. Numpy:difference b/w A [:i] [:j]とA [:i、:j]
- 29. meshgridを介してペアのnumpy配列のすべての組み合わせを見つける
- 30. MPI I/O、シングルプロセス出力とマルチプロセス出力の組み合わせ
どのプログラミング言語つかいます? – TobiMcNamobi
私はJavaを好むでしょう – AsiG
*プログラミング*の質問に答えるために、これまで試みたことを示すコードを提供すると便利です。 – TobiMcNamobi