与えられたリスト1,4,5,9,2は、sum = 6の2つの値の可能な組み合わせを見つけるプログラムを書く

与えられた配列a = [1,4,5,9,2]。私は、sum = 6の2つの値の組み合わせを見つける/印刷する必要があります。

私のコードは以下の通りです:(それはO(n ^ 2)で効率的ではありません)。より良いソリューション -

for(int out=0;out
3
2) O(N ^ 2) O(N)より高速かもしれません。
追加された 著者 Stephen C,

3 答え

  1. すべての数値を HashSet に配置します。
  2. 配列を繰り返し、各項目 val に対して 6-val HashSet にあるかどうかを確認します。

私は宿題のように見えるので、コードを表示していません(そうであれば、そのようにタグ付けしてください)。

また、短い配列の場合、 O(n ^ 2)ソリューションはこれよりも確実に高速になるでしょう。

10
追加された
私はこれがかなり標準的なインタビューの質問であることを確認することができます。私がインタビューしていたときに、5回のインタビューのたびにそうなった。また、あなたの答えは最高です...それはO(n)解決策である2回だけリストを横断します。
追加された 著者 Nicholas,
返信Aixに感謝します。これは宿題の問題ではありません。 SDインタビューの質問を探しているうちに、私は上記の質問につきました。今私は 'インタビュー'タグを追加しました。
追加された 著者 srock,

まず、srockで与えられる解は以下のようになるはずです

int length = a.length;

for(int out = 0; out < length ; out++) {
   for(int inn = 0; inn < length; inn ++) {
      if ((inn != out) && ((a[inn] + a[out]) == 6))
      sysout("The valid combination is "+a[inn]+" "+a[out])
   }
 }

そして、もちろん、これは長さの長さを繰り返す必要があります。 aixで述べたように、containsを含むHashsetを使用すると、時間の長さだけを繰り返し、メソッドはハッシュコードを使用してバケットの場所に直接移動し、比較するデータを取得します。したがって、このHashSet :: containsメソッドは大きなデータがない場合に最適です。

0
追加された
for(int out=0;out
0
追加された