In this HackerRank Triple sum interview preparation kit problem You are Given 3 arrays a,b,c of different sizes, find the number of distinct triplets (p,q,r) where p is an element of a, written as p E a, q E b, and r E c, satisfying the criteria: p <= q and q => r.
Problem solution in Python programming.
#!/bin/python3
import math
import os
import random
import re
import sys
# Complete the triplets function below.
def triplets(a, b, c):
a = list(sorted(set(a)))
b = list(sorted(set(b)))
c = list(sorted(set(c)))
ai = 0
bi = 0
ci = 0
ans = 0
while bi < len(b):
while ai < len(a) and a[ai] <= b[bi]:
ai += 1
while ci < len(c) and c[ci] <= b[bi]:
ci += 1
ans += ai * ci
bi += 1
return ans
if __name__ == '__main__':
fptr = open(os.environ['OUTPUT_PATH'], 'w')
lenaLenbLenc = input().split()
lena = int(lenaLenbLenc[0])
lenb = int(lenaLenbLenc[1])
lenc = int(lenaLenbLenc[2])
arra = list(map(int, input().rstrip().split()))
arrb = list(map(int, input().rstrip().split()))
arrc = list(map(int, input().rstrip().split()))
ans = triplets(arra, arrb, arrc)
fptr.write(str(ans) + '\n')
fptr.close()
Problem solution in Java Programming.
import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
public class Solution {
// Complete the triplets function below.
static long triplets(int[] a, int[] b, int[] c) {
int[] ar = Arrays.stream(a).sorted().distinct().toArray();
int[] br = Arrays.stream(b).sorted().distinct().toArray();
int[] cr = Arrays.stream(c).sorted().distinct().toArray();
long left = 0;
long right = 0;
int l = 0;
int r = 0;
long sum = 0;
for(int i=0; i<br.length; i++) {
while(l<ar.length&&ar[l]<=br[i]) {
left++;
l++;
}
while(r<cr.length&&cr[r]<=br[i]) {
right++;
r++;
}
sum += left*right;
}
return sum;
}
private static final Scanner scanner = new Scanner(System.in);
public static void main(String[] args) throws IOException {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
String[] lenaLenbLenc = scanner.nextLine().split(" ");
int lena = Integer.parseInt(lenaLenbLenc[0]);
int lenb = Integer.parseInt(lenaLenbLenc[1]);
int lenc = Integer.parseInt(lenaLenbLenc[2]);
int[] arra = new int[lena];
String[] arraItems = scanner.nextLine().split(" ");
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
for (int i = 0; i < lena; i++) {
int arraItem = Integer.parseInt(arraItems[i]);
arra[i] = arraItem;
}
int[] arrb = new int[lenb];
String[] arrbItems = scanner.nextLine().split(" ");
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
for (int i = 0; i < lenb; i++) {
int arrbItem = Integer.parseInt(arrbItems[i]);
arrb[i] = arrbItem;
}
int[] arrc = new int[lenc];
String[] arrcItems = scanner.nextLine().split(" ");
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
for (int i = 0; i < lenc; i++) {
int arrcItem = Integer.parseInt(arrcItems[i]);
arrc[i] = arrcItem;
}
long ans = triplets(arra, arrb, arrc);
bufferedWriter.write(String.valueOf(ans));
bufferedWriter.newLine();
bufferedWriter.close();
scanner.close();
}
}
Problem solution in C++ programming.
#include <bits/stdc++.h> using namespace std; int main() { int p,q,r,i,x,y; cin>>p>>q>>r; int a[p],b[q],c[r]; for(i=0;i<p;++i) { cin>>a[i]; } for(i=0;i<q;++i) { cin>>b[i]; } for(i=0;i<r;++i) { cin>>c[i]; } sort(a,a+p); sort(b,b+q); sort(c,c+r); long distinct_a[p],distinct_b[q],distinct_c[r]; set<int> s; for(i=0;i<p;++i) { s.insert(a[i]); distinct_a[i]=s.size(); } s.clear(); for(i=0;i<q;++i) { s.insert(b[i]); distinct_b[i]=s.size(); } s.clear(); for(i=0;i<r;++i) { s.insert(c[i]); distinct_c[i]=s.size(); } long ans=0; x = upper_bound(a,a+p,b[0])-a; y = upper_bound(c,c+r,b[0])-c; x-=1,y-=1; if(x>=0 && y>=0) { ans += distinct_a[x]*distinct_c[y]; } for(i=1;i<q;++i) { if(b[i]!=b[i-1]) { x = upper_bound(a,a+p,b[i])-a; y = upper_bound(c,c+r,b[i])-c; x-=1,y-=1; if(x>=0 && y>=0) { ans += distinct_a[x]*distinct_c[y]; } } } cout<<ans<<endl; return 0; }
0 Comments