私は試験のために勉強していますが、少し難解です。O(n)2つの配列に2つの要素があり、数字になるものがあるかどうかを調べる
AまたはBの各要素がm = 0(n)の範囲0〜mにあるように、A [1 ... n]とB [1 ... n]を2の整数の配列にするとします。我々は二つの要素A [i]とB [j]は、その結果A [I] + B [jで見つけO(N)アルゴリズムを設計する必要(私はM < Nを意味すると仮定しています?)
] =与えられた数k。それらが存在しない場合は、エラーメッセージがスローされます。
ここで、ソートアルゴリズムがO(n lg n)なので、それらを並べ替えるのは問題になりません。
ハッシュテーブルを使用することもできます。あるいは、各インデックスがAの数値の出現をカウントするような長さmの小さな配列Xを作成してください。次に、Bを実行します.. calculate diff = k -B [j ] ...そしてあなたたちは
実際には( 'O(n log n)'のような時間を費やして)配列を前処理することが実際許されていて、 'O(n)'要件は実際に'k 'の異なる値に対するその後の問い合わせ? – AnT
こんにちは。あなたはすでにあなたの質問に答えました!ちょうどビニングに、またはあなたが言ったように、あるいは単により小さな配列Xを作成します。これは非常に効率的で実装が簡単で、ランタイムがO(n)にあることを簡単に確認できます。 –
私はそれを理解します..私はちょうどinterwebsがより良い解決策を持っていたかどうかを見たいと思っていました。しかし、ありがとう –