Probability that a random pair chosen from an array (a[i], a[j]) has the maximum sum
Last Updated :
10 Mar, 2022
Given an array arr[] of N integers, the task is to find the probability of getting the maximum sum pair (arr[i], arr[j]) from the array when a random pair is chosen.
Examples:
Input: arr[] = {3, 3, 3, 3}
Output: 1
All the pairs will give the maximum sum i.e. 6.
Input: arr[] = {1, 1, 1, 2, 2, 2}
Output: 0.2
Only the pairs (2, 2), (2, 2) and (2, 2) will give
the maximum sum out of 15 pairs.
3 / 15 = 0.2
Approach: Run two nested loops to get the sum for every single pair, keep the maximum sum for any pair and its count (i.e. the number of pairs that give this sum). Now, the probability of getting this sum will be (count / totalPairs) where totalPairs = (n * (n – 1)) / 2.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
float findProb( int arr[], int n)
{
long maxSum = INT_MIN, maxCount = 0, totalPairs = 0;
for ( int i = 0; i < n - 1; i++) {
for ( int j = i + 1; j < n; j++) {
int sum = arr[i] + arr[j];
if (sum == maxSum) {
maxCount++;
}
else if (sum > maxSum) {
maxSum = sum;
maxCount = 1;
}
totalPairs++;
}
}
float prob = ( float )maxCount / ( float )totalPairs;
return prob;
}
int main()
{
int arr[] = { 1, 1, 1, 2, 2, 2 };
int n = sizeof (arr) / sizeof ( int );
cout << findProb(arr, n);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static float findProb( int arr[], int n)
{
long maxSum = Integer.MIN_VALUE,
maxCount = 0 , totalPairs = 0 ;
for ( int i = 0 ; i < n - 1 ; i++)
{
for ( int j = i + 1 ; j < n; j++)
{
int sum = arr[i] + arr[j];
if (sum == maxSum)
{
maxCount++;
}
else if (sum > maxSum)
{
maxSum = sum;
maxCount = 1 ;
}
totalPairs++;
}
}
float prob = ( float )maxCount /
( float )totalPairs;
return prob;
}
public static void main(String args[])
{
int arr[] = { 1 , 1 , 1 , 2 , 2 , 2 };
int n = arr.length;
System.out.println(findProb(arr, n));
}
}
|
Python3
import sys
def findProb(arr, n) :
maxSum = - (sys.maxsize - 1 );
maxCount = 0 ;
totalPairs = 0 ;
for i in range (n - 1 ) :
for j in range (i + 1 , n) :
sum = arr[i] + arr[j];
if ( sum = = maxSum) :
maxCount + = 1 ;
elif ( sum > maxSum) :
maxSum = sum ;
maxCount = 1 ;
totalPairs + = 1 ;
prob = maxCount / totalPairs;
return prob;
if __name__ = = "__main__" :
arr = [ 1 , 1 , 1 , 2 , 2 , 2 ];
n = len (arr);
print (findProb(arr, n));
|
C#
using System;
class GFG
{
static float findProb( int []arr, int n)
{
long maxSum = int .MinValue,
maxCount = 0, totalPairs = 0;
for ( int i = 0; i < n - 1; i++)
{
for ( int j = i + 1; j < n; j++)
{
int sum = arr[i] + arr[j];
if (sum == maxSum)
{
maxCount++;
}
else if (sum > maxSum)
{
maxSum = sum;
maxCount = 1;
}
totalPairs++;
}
}
float prob = ( float )maxCount /
( float )totalPairs;
return prob;
}
public static void Main(String []args)
{
int []arr = { 1, 1, 1, 2, 2, 2 };
int n = arr.Length;
Console.WriteLine(findProb(arr, n));
}
}
|
Javascript
<script>
function findProb(arr, n)
{
var maxSum = -100000000, maxCount = 0, totalPairs = 0;
for ( var i = 0; i < n - 1; i++) {
for ( var j = i + 1; j < n; j++) {
var sum = arr[i] + arr[j];
if (sum == maxSum) {
maxCount++;
}
else if (sum > maxSum) {
maxSum = sum;
maxCount = 1;
}
totalPairs++;
}
}
var prob = maxCount / totalPairs;
return prob;
}
var arr = [ 1, 1, 1, 2, 2, 2 ]
var n = arr.length;
document.write(findProb(arr, n));
</script>
|
Time Complexity: O(N2)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...