5

2 つのソートされたリストがあり、両方とも非減少順です。たとえば、要素を含む並べ替えられたリンクリストと、要素を含む別のリンクリストが[2,3,4,5,6,7...]あります[5,6,7,8,9...]

両方のリストですべての共通要素を見つける必要があります。for ループとネストされたループを使用して、すべての一致を繰り返し、同じ 2 つの要素を見つけることができることを知っています。ただし、実行時間が より短い別の方法はありO(n^2)ますか?

4

4 に答える 4

10

O(n)時間でできます。擬似コード:

a = list1.first
b = list2.first
repeat:
    if a == b:
        output a
        a = list1.next
        b = list2.next
    elif a < b:
        a = list1.next
    else
        b = list2.next
until either list has no more elements
于 2013-10-02T03:16:06.083 に答える
0

メイン ループでは、両方のリストから最初の要素を取得して比較します。それらが等しくない場合は、他のループの要素と同じかそれ以上になるまで、少ない要素でリストをスキャンします。等しい場合は、共通の要素が見つかったことを意味します。共通要素が渡されるまで、両方のリストを順番に読み取ります。メイン ループを続行します。このアプローチの複雑さは O(n+m) です。

于 2013-10-02T03:19:52.020 に答える
0

HashSet最初のリストを;に変換します。次に、各要素が にあるかどうかをチェックする 2 番目のリストを繰り返しHashSetます。

于 2013-10-02T03:14:37.420 に答える