给定两个整数数组,其中第一个数组的最大大小很大,第二个数组的最大大小很小。您的任务是查找第一个数组中是否存在一对,其和出现在第二个数组中。
例子:
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