给定包含整数元素和整数sum 的四个数组,任务是对四元组进行计数,以便从不同的数组中选择每个元素,并且所有四个元素的总和等于给定的总和。
例子:
Input: P[] = {0, 2}, Q[] = {-1, -2}, R[] = {2, 1}, S[] = {2, -1}, sum = 0
Output: 2
(0, -1, 2, -1) and (2, -2, 1, -1) are the required quadruplets.
Input: P[] = {1, -1, 2, 3, 4}, Q[] = {3, 2, 4}, R[] = {-2, -1, 2, 1}, S[] = {4, -1}, sum = 3
Output: 10
方法:我们选择任意两个数组并计算所有可能的总和,并将它们的计数保存在一个映射中。使用剩余的两个数组,我们计算所有可能的和并检查它们的加法逆存在于映射中的次数,这将是所需四元组的计数。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to return the count of the required quadruplets
int countQuadruplets(int arr1[], int n1, int arr2[], int n2,
int arr3[], int n3, int arr4[], int n4, int value)
{
int cnt = 0;
unordered_map sum;
// All possible sums from arr1[] and arr2[]
for (int i = 0; i < n1; i++)
for (int j = 0; j < n2; j++)
sum[arr1[i] + arr2[j]]++;
// Find the count of quadruplets
for (int i = 0; i < n3; i++)
for (int j = 0; j < n4; j++)
cnt += sum[value - (arr3[i] + arr4[j])];
return cnt;
}
// Driver code
int main()
{
int arr1[] = { 0, 2 };
int arr2[] = { -1, -2 };
int arr3[] = { 2, 1 };
int arr4[] = { 2, -1 };
int sum = 0;
int n1 = sizeof(arr1) / sizeof(arr1[0]);
int n2 = sizeof(arr2) / sizeof(arr2[0]);
int n3 = sizeof(arr3) / sizeof(arr3[0]);
int n4 = sizeof(arr4) / sizeof(arr4[0]);
cout << countQuadruplets(arr1, n1, arr2, n2, arr3, n3, arr4, n4, sum);
return 0;
}
Java
// Java implementation of the approach
import java.util.*;
class GFG {
// Function to return the count of the required quadruplets
static int countQuadruplets(int arr1[], int n1, int arr2[], int n2,
int arr3[], int n3, int arr4[], int n4, int value)
{
int cnt = 0;
Map sum = new HashMap<>();
// All possible sums from arr1[] and arr2[]
for (int i = 0; i < n1; i++)
for (int j = 0; j < n2; j++) {
if (sum.containsKey(arr1[i] + arr2[j])) {
sum.put(arr1[i] + arr2[j], sum.get(arr1[i] + arr2[j]) + 1);
}
else {
sum.put(arr1[i] + arr2[j], 1);
}
}
// Find the count of quadruplets
for (int i = 0; i < n3; i++)
for (int j = 0; j < n4; j++)
if (sum.containsKey(value - (arr3[i] + arr4[j])))
cnt += sum.get(value - (arr3[i] + arr4[j]));
return cnt;
}
// Driver code
public static void main(String[] args)
{
int arr1[] = { 0, 2 };
int arr2[] = { -1, -2 };
int arr3[] = { 2, 1 };
int arr4[] = { 2, -1 };
int sum = 0;
int n1 = arr1.length;
int n2 = arr2.length;
int n3 = arr3.length;
int n4 = arr4.length;
System.out.println(countQuadruplets(arr1, n1, arr2, n2,
arr3, n3, arr4, n4, sum));
}
}
// This code contributed by Rajput-Ji
Python3
# Python 3 implementation of the approach
# Function to return the count
# of the required quadruplets
def countQuadruplets(arr1, n1, arr2, n2,
arr3, n3, arr4, n4, value):
cnt = 0
sum = {i:0 for i in range(-4, 10, 1)}
# All possible sums from arr1[] and arr2[]
for i in range(n1):
for j in range(n2):
sum[arr1[i] + arr2[j]] += 1
# Find the count of quadruplets
for i in range(n3):
for j in range(n4):
cnt += sum[value - (arr3[i] + arr4[j])]
return cnt
# Driver code
if __name__ == '__main__':
arr1 = [0, 2]
arr2 = [-1, -2]
arr3 = [2, 1]
arr4 = [2, -1]
sum = 0
n1 = len(arr1)
n2 = len(arr2)
n3 = len(arr3)
n4 = len(arr4)
print(countQuadruplets(arr1, n1, arr2, n2,
arr3, n3, arr4, n4, sum))
# This code is contributed by
# Surendra_Gangwar
C#
// C# implementation of the approach
using System;
using System.Collections.Generic;
class GFG {
// Function to return the count of the required quadruplets
static int countQuadruplets(int[] arr1, int n1,
int[] arr2, int n2,
int[] arr3, int n3,
int[] arr4, int n4, int value)
{
int cnt = 0;
Dictionary sum = new Dictionary();
// All possible sums from arr1[] and arr2[]
for (int i = 0; i < n1; i++)
for (int j = 0; j < n2; j++) {
if (sum.ContainsKey(arr1[i] + arr2[j])) {
var obj = sum[arr1[i] + arr2[j]] + 1;
sum.Remove(arr1[i] + arr2[j]);
sum.Add(arr1[i] + arr2[j], obj);
}
else {
sum.Add(arr1[i] + arr2[j], 1);
}
}
// Find the count of quadruplets
for (int i = 0; i < n3; i++)
for (int j = 0; j < n4; j++)
if (sum.ContainsKey(value - (arr3[i] + arr4[j])))
cnt += sum[value - (arr3[i] + arr4[j])];
return cnt;
}
// Driver code
public static void Main(String[] args)
{
int[] arr1 = { 0, 2 };
int[] arr2 = { -1, -2 };
int[] arr3 = { 2, 1 };
int[] arr4 = { 2, -1 };
int sum = 0;
int n1 = arr1.Length;
int n2 = arr2.Length;
int n3 = arr3.Length;
int n4 = arr4.Length;
Console.WriteLine(countQuadruplets(arr1, n1, arr2, n2,
arr3, n3, arr4, n4, sum));
}
}
/* This code contributed by PrinciRaj1992 */
PHP
Javascript
输出:
2
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。