ソートされていないXNUMXつの配列が与えられた場合、合計がxであるすべてのペアを見つけます


難易度 簡単に
よく聞かれる Amazon (アマゾン) Facebook
配列 ハッシュ ハッシング

問題文

ソートされていないXNUMXつが与えられた アレイ、合計がxであるすべてのペアを見つけます。問題は、ソートされていない整数のXNUMXつの配列とsumと呼ばれる値が与えられていることを示しています。 問題ステートメントは、ペアの総数を調べて、sumと呼ばれる指定された値に合計されるすべてのペアを出力するように要求します。

arr1[] = { 3,6,1,4,8,2}

arr2[] = { 2,1,5,7,2,4}

sum = 9
(8, 1), (4, 5) (2, 7)

説明:9つのペアすべてに、指定された値XNUMXに等しい合計を持つ数値があります。

arr1[] = { 2,5,1,7,9}

arr2[] = { 3,6,8,1,0}

sum = 7
(1, 6), (7, 0)

説明:7つのペアの両方に、指定された値XNUMXに等しい合計を持つ数値があります。

XNUMXつのソートされていない配列でsum = xを持つすべてのペアを見つけるアルゴリズム

1. Declare a Set.
2. Insert all the values of array1 into the Set.
3. Traverse the array2.
4. Check if the difference of sum and each number of array2 is present in a set.
5. If present then prints the difference and the current array element.

説明

ソートされていない1つの配列が与えられた場合、合計がxであるすべてのペアを見つけます。 このために、セットを使用します。 セットには、共通の要素を削除する機能もあります。 これから行うことは、arrayXNUMXのすべての値をセットに挿入することです。 ここで、setが要素を削除するか、削除しない場合。 ペアが形成できるかどうかを確認するための番号だけが必要なので、それほど気にしません。

最初の配列をトラバースしている間、そのすべての値をセットに挿入します。 後で、このセットを使用して、合計が合計と呼ばれる指定された値に等しい形成可能なペアがあるかどうかを確認します。 セットへのすべての値の挿入が終了したら、配列2をトラバースします。

2番目の配列の最初の要素から始めて、トラバース中に指定された値と1番目の配列の各値の違いを確認します。 これは、a + b = cというXNUMXつの数値を加算できるのと似ています。ここで、bとcしかない場合、cbを使用すると「a」を見つけることができます。 同じことがここにあり、ペアを完成させるために必要な値を見つけることができる結果の値があります。 そのため、arrayXNUMXのarrayXNUMXの合計と各値の差を探しています。 ペアがペアと現在の配列要素の差を単に出力することがわかった場合、これが必要なペアになります。

ソートされていないXNUMXつの配列が与えられた場合、合計がxであるすべてのペアを見つけます

コード

XNUMXつのソートされていない配列でsum = xを持つすべてのペアを検索するC ++コード

#include<iostream>
#include<unordered_set>

using namespace std;

void getPairsofSum(int arr1[], int arr2[], int l1, int l2, int sum)
{
    unordered_set<int> MAP;
    for (int i = 0; i < l1; i++)
        MAP.insert(arr1[i]);

    for (int j = 0; j < l2; j++)
        if (MAP.find(sum - arr2[j]) != MAP.end())
            cout << sum - arr2[j] << " "<< arr2[j] << endl;
}
int main()
{
    int arr1[] = { 3,6,1,4,8,2};
    int arr2[] = { 2,1,5,7,2,4};
    int sum = 9;
    int l1 = sizeof(arr1) / sizeof(int);
    int l2 = sizeof(arr2) / sizeof(int);
    getPairsofSum(arr1, arr2, l1, l2, sum);
    return 0;
}
8 1
4 5
2 7

 

XNUMXつのソートされていない配列でsum = xを持つすべてのペアを検索するJavaコード

import java.util.HashMap;

class PairofSumUnsortedArray
{
    public static void getPairsofSum(int arr1[], int arr2[], int l1, int l2, int sum)
    {
        HashMap<Integer, Integer> MAP = new HashMap<Integer, Integer>();

        for (int i = 0; i < l1; i++)
            MAP.put(arr1[i], 0);

        for (int j = 0; j < l2; j++)
            if (MAP.containsKey(sum - arr2[j]))
                System.out.println(sum - arr2[j] + " " + arr2[j]);
    }
    public static void main(String[] args)
    {
        int arr1[] = { 3,6,1,4,8,2};
        int arr2[] = { 2,1,5,7,2,4};
        int sum = 9;
        getPairsofSum(arr1, arr2, arr1.length, arr2.length, sum);
    }
}
8 1
4 5
2 7

 

複雑さの分析

時間の複雑さ

O(max(n、m)) where 「n」 及び "m" XNUMX番目とXNUMX番目の配列の長さです。

スペースの複雑さ

O(max(n、m)) where 「n」 及び "m" XNUMX番目とXNUMX番目の配列の長さです。