はい、実際にはO(n + m)となります。ここで、nとmは1番目と2番目の配列の長さです。
アルゴリズムは、1つのパスがマージと呼ばれる
疑似コード:基本的に
i, j, k = 0 // k is index for resulting array
//maximum length of the resulting array can be n+m,
//so it is always safe to malloc for such a length if you are in C or C++
while(i< len(array1) and j < len(array2))
if (array1[i] == array2[j])
result[k] = array1[i]
++i, ++j, ++k
else if (array1[i] < array2[j])
result[k] = array1[i]
++i, ++k
else
result[k] = array2[j]
++j, ++k
//now one array might not be traversed all the way up
if (i < len(array1))
while(i != len(array1))
result[k] = array1[i]
++i, ++k
else if (j < len(array2))
while(j != len(array2))
result[k] = array2[j]
++j, ++k
、一度に両方の配列を横断し、長さが異なる場合、大きいアレイウォン」すべての方法でトラバースされるので、大きな配列のすべての要素をの結果に追加するだけです。
インタビュー質問ですか? –
いいえ、私の宿題に関する質問です。 – ron
あなたは本当に自分自身のことを理解しようとするべきです。これは多くのアルゴリズム/データ構造で重要かつ基本的なテクニックであり、深く理解しようと努力する価値があります。ただ解決策を探して助けを求めるのは、宿題をすることのポイントを打ち負かし、あなたを共依存者にして人手が足りなくなるようにします。 – Mikola