📜  须藤铺位|美丽的对

📅  最后修改于: 2021-04-24 21:19:28             🧑  作者: Mango

给定两个整数数组,其中第一个数组的最大大小很大,第二个数组的最大大小很小。您的任务是查找第一个数组中是否存在一对,其和出现在第二个数组中。

例子:

Input: 
4
1 5 10 8
3
2 20 13
Output: 1

方法:我们有x + y = z。可以将其重写为x = z – y。这意味着,我们需要在数组1中找到一个元素x,使其成为z(第二个数组)– y(第一个数组)的结果。为此,请使用散列来跟踪此类元素x。

C++
// C++ code for finding required pairs
#include 
using namespace std;
 
// The function to check if beautiful pair exists
bool pairExists(int arr1[], int m, int arr2[], int n)
{
    // Set for hashing
    unordered_set s;
 
    // Traversing the first array
    for (int i = 0; i < m; i++) {
 
        // Traversing the second array to check for
        // every j corresponding to single i
        for (int j = 0; j < n; j++) {
 
            // x + y = z => x = y - z
            if (s.find(arr2[j] - arr1[i]) != s.end())
 
                // if such x exists then we return true
                return true;
 
        }
 
       // hash to make use of it next time
       s.insert(arr1[i]);
 }
 
    // no pair exists
    return false;
}
 
// Driver Code
int main()
{
    int arr1[] = { 1, 5, 10, 8 };
    int arr2[] = { 2, 20, 13 };
 
    // If pair exists then 1 else 0
    // 2nd argument as size of first array
    // fourth argument as sizeof 2nd array
    if (pairExists(arr1, 4, arr2, 3))
        cout << 1 << endl;
    else
        cout << 0 << endl;
 
    return 0;
}


Java
// Java code for finding required pairs
import java.util.*;
class GFG
{
        // The function to check if beautiful pair exists
        static boolean pairExists(int []arr1, int m, int []arr2, int n)
        {
            // Set for hashing
            Set s =new HashSet();
         
            // Traversing the first array
            for (int i = 0; i < m; i++) {
         
                // Traversing the second array to check for
                // every j corresponding to single i
                for (int j = 0; j < n; j++)
                {
         
                    // x + y = z => x = y - z
                    if (s.contains(arr2[j] - arr1[i]))
         
                        // if such x exists then we return true
                        return true;
         
                }
         
            // hash to make use of it next time
            s.add(arr1[i]);
        }
         
            // no pair exists
            return false;
        }
         
        // Driver Code
        public static void main(String []args)
        {
            int []arr1 = { 1, 5, 10, 8 };
            int []arr2 = { 2, 20, 13 };
         
            // If pair exists then 1 else 0
            // 2nd argument as size of first array
            // fourth argument as sizeof 2nd array
            if (pairExists(arr1, 4, arr2, 3))
                System.out.println(1);
            else
                System.out.println(0);
         
        }
 
// This code is contributed by ihritik
}


Python3
# Python3 code for finding required pairs
from typing import List
 
# The function to check if beautiful pair exists
def pairExists(arr1: List[int], m: int,
               arr2: List[int], n: int) -> bool:
                    
    # Set for hashing
    s = set()
 
    # Traversing the first array
    for i in range(m):
 
        # Traversing the second array to check for
        # every j corresponding to single i
        for j in range(n):
 
            # x + y = z => x = y - z
            if (arr2[2] - arr1[2]) not in s:
                 
                # If such x exists then we
                # return true
                return True
 
        # Hash to make use of it next time
        s.add(arr1[i])
 
    # No pair exists
    return False
 
# Driver Code
if __name__ == "__main__":
 
    arr1 = [ 1, 5, 10, 8 ]
    arr2 = [ 2, 20, 13 ]
 
    # If pair exists then 1 else 0
    # 2nd argument as size of first array
    # fourth argument as sizeof 2nd array
    if (pairExists(arr1, 4, arr2, 3)):
        print(1)
    else:
        print(0)
 
# This code is contributed by sanjeev2552


C#
// C# code for finding required pairs
using System;
using System.Collections.Generic;
 
class GFG
{
        // The function to check if
        // beautiful pair exists
        static bool pairExists(int []arr1,
                int m, int []arr2, int n)
        {
            // Set for hashing
            HashSet s = new HashSet();
         
            // Traversing the first array
            for (int i = 0; i < m; i++)
            {
         
                // Traversing the second array to check for
                // every j corresponding to single i
                for (int j = 0; j < n; j++)
                {
         
                    // x + y = z => x = y - z
                    if (s.Contains(arr2[j] - arr1[i]))
         
                        // if such x exists then we return true
                        return true;
         
                }
         
            // hash to make use of it next time
            s.Add(arr1[i]);
        }
         
            // no pair exists
            return false;
        }
         
        // Driver Code
        public static void Main()
        {
            int []arr1 = { 1, 5, 10, 8 };
            int []arr2 = { 2, 20, 13 };
         
            // If pair exists then 1 else 0
            // 2nd argument as size of first array
            // fourth argument as sizeof 2nd array
            if (pairExists(arr1, 4, arr2, 3))
                Console.WriteLine(1);
            else
                Console.WriteLine(0);
        }
}
 
/* This code contributed by PrinciRaj1992 */


输出:
1