C言語の配列を結合し、重複を削除する方法は何ですか?

C言語の配列をマージして重複を取り除く方法には、以下のようなものがあります:

  1. 2つの配列を二重ループで走査し、重複しない要素を新しい配列に格納します。この方法の時間複雑度はO(n^2)です。
  2. まず、2つの配列をそれぞれソートし、その後、重複を削除しながらマージするために、2つのポインタを使用します。最初に、2つの配列の最初の要素を比較し、より小さい要素を新しい配列に保存し、対応するポインタを1つ後ろに移動します。要素が等しい場合は、1つの要素のみを保存し、2つのポインタを両方1つ後ろに移動します。両方の配列を繰り返し処理して、マージ後の配列を取得します。この方法の時間複雑度はO(nlogn)であり、nは2つの配列の合計長です。
  3. ハッシュテーブル(散列表)を使用して重複を削除します。最初の配列をループし、各要素をハッシュテーブルに保存します。その後、2番目の配列をループし、各要素について、ハッシュテーブルにすでに存在するかどうかを確認し、存在しない場合はハッシュテーブルに保存します。最後に、ハッシュテーブルをループし、重複しないすべての要素を新しい配列に保存します。この方法の時間計算量はO(n)であり、nは2つの配列の合計要素数です。ただし、ハッシュテーブルを保存するための追加のスペースが必要です。

総合すると、ハッシュテーブルを使用した方法は効率が高いが、追加のスペースが必要です。一方で、双方向ポインタ法は効率が低いが追加のスペースが必要ありません。どちらの方法を選ぶかは具体的なニーズによります。

bannerAds