特定の値よりも差が小さいペアの最大数を見つける方法は?

ジョン・ルイ

正の整数を含む2つの配列(重複を含むことができ、同じ長さである可能性があります)が与えられます。両方の配列から数値を1回しか使用できない場合、絶対差が特定の値(指定された値)に等しくないペアの最大数を見つける必要があります。

例えば:

arr1 = {1,2,3,4}
arr2 = {8,9,10,11}
diff = 5

次に、可能なペアは(3,8)、(4,8)です。つまり、そのような可能なペアは2つだけです。

出力は2である必要があります。

また、O(n ^ 2)でこれのアルゴリズムを考えることができます。しかし、もっと良いものが必要です。ハッシュマップ(配列に重複が含まれているため機能しません)を考え、配列を降順と昇順で並べ替えることを考えましたが、そこから先に進むことはできませんでした。

davidhigh

通常の考え方は、ソートされた範囲をループすることです。これにより、力ずくのO(N^2)努力を通常に下げることができますO(N log N)

疑似コードでのそのためのアルゴリズムは次のとおりです(後で実際のC ++コードで更新する可能性があります)。

  • 両方の配列を並べ替える
  • 2つのイテレータで両方を同時にループします。
    1. ペアが見つかった場合は、リストに挿入します。両方のイテレータを増やします。
    2. それ以外の場合は、小さい要素を指すインジケーターを増やします。

全体として、これは平均してかかる種類によって支配されますO(N log N)


約束されたコードは次のとおりです。

auto find_pairs(std::vector<int>& arr1, std::vector<int>& arr2, int diff)
{
    std::vector<std::pair<int,int> > ret;

    std::sort(std::begin(arr1), std::end(arr1));
    std::sort(std::begin(arr2), std::end(arr2));

    auto it1= std::begin(arr1);
    auto it2= std::begin(arr2);

    while(it1!= std::end(arr1) && it2!= std::end(arr2))
    {
        if(std::abs(*it1-*it2) == diff)
        {
            ret.push_back(std::make_pair(*it1,*it2));
            ++it1;
            ++it2;
        }
        else if(*it1<*it2)
        {
            ++it1;
        }
        else
        {
            ++it2;
        }
    }

    return ret;
}

2つのベクトルの一致する要素をのベクトルとして返しますstd::pairsあなたの例では、それは印刷します

3  8
4  9

デモ

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Notepad ++で別の値よりも小さい値を見つける方法は?

分類Dev

xとの差が最も小さい辞書値を見つける方法[Swift]

分類Dev

SQL:特定の値の最大数を持つ行を見つける方法

分類Dev

二分探索木で数値を検索します。存在しない場合は、それよりも小さい最大数を見つけます

分類Dev

特定の値よりも小さいベクトルで最大の数を見つける

分類Dev

パンダの列で、特定の値が発生する連続する行の最大数を見つける方法は?

分類Dev

Pandas Python で同じ値の最大数を見つけるにはどうすればよいですか?

分類Dev

行の最大数を見つける

分類Dev

最大数のQtを見つける

分類Dev

行間の差が特定の値よりも小さい観測値を削除する方法

分類Dev

このコードを書くより良い方法はありますか?(配列内の最小数と最大数を見つける)[Java]

分類Dev

与えられた数よりも小さい2の最大の累乗を見つける方法

分類Dev

列がその特定の行の最大数を持っていた回数を見つける

分類Dev

Tableauで、一連の数値の最大値と最大数の後の数値の平均との差を見つけるにはどうすればよいですか?

分類Dev

数値の入力ファイルから最大数を見つける方法

分類Dev

同じ名前の列の最大数を見つける方法

分類Dev

ペアのリストでペアの最大数を見つけます

分類Dev

特定のDataFrame列で、指定された最大値よりも大きい/小さい値を見つけて、前の行の値に置き換えるにはどうすればよいですか?

分類Dev

GCDが1に等しく、それらの数値がpythonで指定されている数値よりも小さい数値を見つける方法

分類Dev

与えられた値よりも小さい最大値を見つけるための時間計算量はどれくらいですか?

分類Dev

結果の最大数を見つける方法

分類Dev

関連するレコードの最大数を見つける方法は?

分類Dev

関連するレコードの最大数を見つける方法は?

分類Dev

最大数を見つけている間のPythonエラー

分類Dev

どのように実行することができ、参加者の最大数を見つけるには?

分類Dev

配列内の最大数を見つけるjavascriptが機能しない

分類Dev

値より大きい、小さい、または等しい配列内の数値を見つける方法は?

分類Dev

配列内の要素よりも大きい/小さい要素の数を見つける方法は?

分類Dev

Tensorflowで連続するものの最大数を見つける

Related 関連記事

  1. 1

    Notepad ++で別の値よりも小さい値を見つける方法は?

  2. 2

    xとの差が最も小さい辞書値を見つける方法[Swift]

  3. 3

    SQL:特定の値の最大数を持つ行を見つける方法

  4. 4

    二分探索木で数値を検索します。存在しない場合は、それよりも小さい最大数を見つけます

  5. 5

    特定の値よりも小さいベクトルで最大の数を見つける

  6. 6

    パンダの列で、特定の値が発生する連続する行の最大数を見つける方法は?

  7. 7

    Pandas Python で同じ値の最大数を見つけるにはどうすればよいですか?

  8. 8

    行の最大数を見つける

  9. 9

    最大数のQtを見つける

  10. 10

    行間の差が特定の値よりも小さい観測値を削除する方法

  11. 11

    このコードを書くより良い方法はありますか?(配列内の最小数と最大数を見つける)[Java]

  12. 12

    与えられた数よりも小さい2の最大の累乗を見つける方法

  13. 13

    列がその特定の行の最大数を持っていた回数を見つける

  14. 14

    Tableauで、一連の数値の最大値と最大数の後の数値の平均との差を見つけるにはどうすればよいですか?

  15. 15

    数値の入力ファイルから最大数を見つける方法

  16. 16

    同じ名前の列の最大数を見つける方法

  17. 17

    ペアのリストでペアの最大数を見つけます

  18. 18

    特定のDataFrame列で、指定された最大値よりも大きい/小さい値を見つけて、前の行の値に置き換えるにはどうすればよいですか?

  19. 19

    GCDが1に等しく、それらの数値がpythonで指定されている数値よりも小さい数値を見つける方法

  20. 20

    与えられた値よりも小さい最大値を見つけるための時間計算量はどれくらいですか?

  21. 21

    結果の最大数を見つける方法

  22. 22

    関連するレコードの最大数を見つける方法は?

  23. 23

    関連するレコードの最大数を見つける方法は?

  24. 24

    最大数を見つけている間のPythonエラー

  25. 25

    どのように実行することができ、参加者の最大数を見つけるには?

  26. 26

    配列内の最大数を見つけるjavascriptが機能しない

  27. 27

    値より大きい、小さい、または等しい配列内の数値を見つける方法は?

  28. 28

    配列内の要素よりも大きい/小さい要素の数を見つける方法は?

  29. 29

    Tensorflowで連続するものの最大数を見つける

ホットタグ

アーカイブ