Problem
The goal is to count all the quadruplets having a target sum
S
.
Sample Input
[2, 2, 2, 2, 2]
Sample Output
5
Approach
Initialize
ans
variable with
0
. Traverse the given array from
0
to
N-3
. For each element
arr
[i]
, traverse the array again from
i+1
to
N-2
using the variable
j
and do the following: Find the value of the required sum as (
S –
arr
[i] –
arr
[j]
). Initialize the
ans2
with
0
that will store the count of ordered pairs in the above subarray with the sum (
S –
arr
[i] –
arr
[j]
). After finding the
ans2
, update the
ans
by
ans
/ 2
.
C++ Programming
#include <iostream> #include <unordered_map> using namespace std; // Function to return the number of // quadruplets int solve(int a[], int n, int sum) { int i, j, k, l; int ans = 0; // all possible first elements for (i = 0; i < n - 3; i++) { // all possible second element for (j = i + 1; j < n - 2; j++) { int req = sum - a[i] - a[j]; unordered_map<int, int> mp; for (k = j + 1; k < n; k++) mp[a[k]]++; int ans2 = 0; for (k = j + 1; k < n; k++) { ans2 += mp[req - a[k]]; if (req - a[k] == a[k]) ans2--; } ans += ans2 / 2; } } return ans; } int main() { int arr[] = {2, 2, 2, 2, 2 }; int S = 8; int N = sizeof(arr) / sizeof(arr[0]); cout << solve(arr, N, S); return 0; }
Output
5
Python Programming
def solve(a, n, total): ans = 0 # All possible first elements for i in range(n - 3): # All possible second elements for j in range(i + 1, n - 2, 1): req = total - a[i] - a[j] mp = {} for k in range(j + 1, n, 1): mp[a[k]] = mp.get(a[k], 0) + 1 ans2 = 0 for k in range(j + 1, n, 1): ans2 += mp.get(req - a[k], 0) if (req - a[k] == a[k]): ans2 -= 1 ans += ans2 // 2 return ans arr = [2, 2, 2, 2, 2] S = 8 N = len(arr) print(solve(arr, N, S))
Output
5
C# Programming
using System; using System.Collections.Generic; class Solution{ static int solve(int []a, int n,int sum) { // Initialize variables int i, j, k; // Initialize answer int ans = 0; // All possible first elements for(i = 0; i < n - 3; i++) { // All possible second element for(j = i + 1; j < n - 2; j++) { int req = sum - a[i] - a[j]; Dictionary<int,int> mp = new Dictionary<int,int>(); for(k = j + 1; k < n; k++) if (mp.ContainsKey(a[k])) { mp[a[k]]++; } else { mp.Add(a[k], 1); } int ans2 = 0; // Calculate number of valid // 4th elements for(k = j + 1; k < n; k++) { // Update the ans2 if (mp.ContainsKey(req - a[k])) ans2 += mp[req - a[k]]; if (req - a[k] == a[k]) ans2--; } ans += ans2 / 2; } } return ans; } public static void Main(String[] args) { int []arr = {2, 2, 2, 2, 2}; int S = 8; int N = arr.Length; Console.Write(solve(arr, N, S)); } }
Output
5
People are also reading:
- Print given series:1 2 4 8 16 32 64 128
- Find quotient and remainder of two numbers
- Program to Find the Factors of Number
- Python Program to Make a Simple Calculator
- Find the Sum of Natural Numbers
- Python Program to Check Armstrong Number
- Program to Display the Multiplication Table
- Python Program to Merge Mails
- WAP to Find the Sum of Series 1+x+x^2+……+x^n
- Python Program to Transpose a Matrix
Leave a Comment on this Post