Open In App

Count of distinct possible pairs such that the element from A is greater than the element from B

Last Updated : 12 Nov, 2021
Comments
Improve
Suggest changes
Like Article
Like
Report

Given two given arrays A and B of equal length, the task is to find the maximum number of distinct pairs of elements that can be chosen such that the element from A is strictly greater than the element from B.


Examples: 

Input: 
A[]={20, 30, 50} , B[]={25, 60, 40} 
Output:
Explanation: 
(30, 25) and (50, 40) are the two possible pairs.


Input: 
A[]={20, 25, 60} , B[]={25, 60, 40} 
Output:
Explanation: 
(60, 25) or (60, 40) can be the required pair.  

Approach: In order to solve this problem, we need to adopt the following approach: 

  • Sort both the arrays.
  • Traverse the entire length of array A and check if the current element in A is greater than the element in B currently pointed at B.
  • If so, point to the next element in both the arrays. Otherwise, move to the next element in A and check if it is greater than the element currently pointed at B.
  • The number of elements traversed in array B after the entire traversal of array A gives the required answer.

Illustration: 
Let us consider the two following arrays: 
A[] = {30, 28, 45, 22} , B[] = {35, 25, 22, 48} 
After sorting, the arrays appear to be 
A[] = {22, 28, 30, 45} , B[] = {22, 25, 35, 48}
After the first iteration, since A[0] is not greater than B[0], we move to A[1]. 
After the second iteration, we move to B[1] as A[1] is greater than B[0]. 
After the third iteration, we move to B[2] as A[2] is greater than B[1]. 
Similarly, A[3] is greater than B[2] and we move to B[3]. 
Hence, the number of elements traversed in B, i.e. 3, is the final answer. 
The possible pairs are (28,22), (30,25), (45, 35). 


Below is the implementation of the above approach: 

C++
// C++ Program to count number of distinct 
// pairs possible from the two arrays
// such that element selected from one array is 
// always greater than the one selected from 
// the other array

#include <bits/stdc++.h>
using namespace std;

// Function to return the count 
// of pairs
int countPairs(vector<int> A,
                    vector<int> B)
{
    int n = A.size();
    
    sort(A.begin(),A.end());
    sort(B.begin(),B.end());
    
    int ans = 0, i;
    for (int i = 0; i < n; i++) {
        if (A[i] > B[ans]) {
            ans++;
        }
    }
    
    return ans;
}

// Driver code
int main()
{
    vector<int> A = { 30, 28, 45, 22 };
    vector<int> B = { 35, 25, 22, 48 };
    
    cout << countPairs(A,B);
    
    return 0;
}
Java
// Java program to count number of distinct 
// pairs possible from the two arrays such 
// that element selected from one array is 
// always greater than the one selected from 
// the other array
import java.util.*;

class GFG{

// Function to return the count 
// of pairs
static int countPairs(int [] A,
                      int [] B)
{
    int n = A.length;
    int ans = 0;
    
    Arrays.sort(A);
    Arrays.sort(B);
    
    for(int i = 0; i < n; i++)
    {
       if (A[i] > B[ans])
       {
           ans++;
       }
    }
    return ans;
}

// Driver code
public static void main(String[] args)
{
    int [] A = { 30, 28, 45, 22 };
    int [] B = { 35, 25, 22, 48 };
    
    System.out.print(countPairs(A, B));
}
}

// This code is contributed by sapnasingh4991
Python3
# Python3 program to count number of distinct
# pairs possible from the two arrays
# such that element selected from one array is
# always greater than the one selected from
# the other array

# Function to return the count
# of pairs
def countPairs(A, B):

    n = len(A)

    A.sort()
    B.sort()

    ans = 0
    for i in range(n):
        if(A[i] > B[ans]):
            ans += 1

    return ans

# Driver code
if __name__ == '__main__':
    A = [30, 28, 45, 22]
    B = [35, 25, 22, 48]

    print(countPairs(A, B))

# This code is contributed by Shivam Singh
C#
// C# program to count number of distinct 
// pairs possible from the two arrays such 
// that element selected from one array is 
// always greater than the one selected from 
// the other array
using System;
class GFG{

// Function to return the count 
// of pairs
static int countPairs(int [] A,
                      int [] B)
{
    int n = A.Length;
    int ans = 0;
    
    Array.Sort(A);
    Array.Sort(B);
    
    for(int i = 0; i < n; i++)
    {
        if (A[i] > B[ans])
        {
            ans++;
        }
    }
    return ans;
}

// Driver code
public static void Main()
{
    int []A = { 30, 28, 45, 22 };
    int []B = { 35, 25, 22, 48 };
    
    Console.Write(countPairs(A, B));
}
}

// This code is contributed by Code_Mech
JavaScript
<script>

// Javascript program to count number of distinct 
// pairs possible from the two arrays such 
// that element selected from one array is 
// always greater than the one selected from 
// the other array

// Function to return the count 
// of pairs
function countPairs(A, B)
{
    let n = A.length;
    let ans = 0;
      
    A.sort();
    B.sort();
      
    for(let i = 0; i < n; i++)
    {
       if (A[i] > B[ans])
       {
           ans++;
       }
    }
    return ans;
}


// Driver Code
    
    let A = [ 30, 28, 45, 22 ];
    let B = [ 35, 25, 22, 48 ];
      
    document.write(countPairs(A, B));
        
</script>

Output: 
3

 

Time Complexity: O(n * log n)

Auxiliary Space: O(1)


Next Article

Similar Reads