Sunday, November 17, 2024
Google search engine
HomeData Modelling & AIPrint all pairs with given sum

Print all pairs with given sum

Given an array of integers, and a number ‘sum’, print all pairs in the array whose sum is equal to ‘sum’.

Examples :
Input : arr[] = {1, 5, 7, -1, 5},
sum = 6
Output : (1, 5) (7, -1) (1, 5)
Input : arr[] = {2, 5, 17, -1},
sum = 7
Output : (2, 5)

A simple solution is to traverse each element and check if there’s another number in the array which can be added to it to give sum.

C++




// C++ implementation of simple method to
// find print pairs with given sum.
#include <bits/stdc++.h>
using namespace std;
 
// Returns number of pairs in arr[0..n-1]
// with sum equal to 'sum'
int printPairs(int arr[], int n, int sum)
{
    int count = 0; // Initialize result
 
    // Consider all possible pairs and check
    // their sums
    for (int i = 0; i < n; i++)
        for (int j = i + 1; j < n; j++)
            if (arr[i] + arr[j] == sum)
                cout << "(" << arr[i] << ", " << arr[j]
                     << ")" << endl;
}
 
// Driver function to test the above function
int main()
{
    int arr[] = { 1, 5, 7, -1, 5 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int sum = 6;
    printPairs(arr, n, sum);
    return 0;
}


Java




// Java implementation of
// simple method to find
// print pairs with given sum.
 
class GFG {
 
    // Returns number of pairs
    // in arr[0..n-1] with sum
    // equal to 'sum'
    static void printPairs(int arr[], int n, int sum)
    {
        // int count = 0;
 
        // Consider all possible pairs
        // and check their sums
        for (int i = 0; i < n; i++)
            for (int j = i + 1; j < n; j++)
                if (arr[i] + arr[j] == sum)
                    System.out.println("(" + arr[i] + ", "
                                       + arr[j] + ")");
    }
 
    // Driver Code
    public static void main(String[] arg)
    {
        int arr[] = { 1, 5, 7, -1, 5 };
        int n = arr.length;
        int sum = 6;
        printPairs(arr, n, sum);
    }
}
 
// This code is contributed
// by Smitha


Python3




# Python 3 implementation
# of simple method to find
# print pairs with given sum.
 
# Returns number of pairs
# in arr[0..n-1] with sum
# equal to 'sum'
 
 
def printPairs(arr, n, sum):
 
    # count = 0
 
    # Consider all possible
    # pairs and check their sums
    for i in range(0, n):
        for j in range(i + 1, n):
            if (arr[i] + arr[j] == sum):
                print("(", arr[i],
                      ", ", arr[j],
                      ")", sep="")
 
 
# Driver Code
arr = [1, 5, 7, -1, 5]
n = len(arr)
sum = 6
printPairs(arr, n, sum)
 
# This code is contributed
# by Smitha


C#




// C# implementation of simple
// method to find print pairs
// with given sum.
using System;
 
class GFG {
    // Returns number of pairs
    // in arr[0..n-1] with sum
    // equal to 'sum'
    static void printPairs(int[] arr, int n, int sum)
    {
        // int count = 0;
 
        // Consider all possible pairs
        // and check their sums
        for (int i = 0; i < n; i++)
            for (int j = i + 1; j < n; j++)
                if (arr[i] + arr[j] == sum)
                    Console.Write("(" + arr[i] + ", "
                                  + arr[j] + ")"
                                  + "\n");
    }
 
    // Driver Code
    public static void Main()
    {
        int[] arr = { 1, 5, 7, -1, 5 };
        int n = arr.Length;
        int sum = 6;
        printPairs(arr, n, sum);
    }
}
 
// This code is contributed
// by Smitha


Javascript




<script>
 
// JavaScript implementation of simple method to
// find print pairs with given sum.
 
// Returns number of pairs in arr[0..n-1]
// with sum equal to 'sum'
function printPairs(arr, n, sum)
{
    let count = 0; // Initialize result
 
    // Consider all possible pairs and check
    // their sums
    for (let i = 0; i < n; i++)
        for (let j = i + 1; j < n; j++)
            if (arr[i] + arr[j] == sum)
                 document.write("(" + arr[i] + ", "
                    + arr[j] + ")" + "<br>");
}
 
// Driver function to test the above function
 
    let arr = [ 1, 5, 7, -1, 5 ];
    let n = arr.length;
    let sum = 6;
    printPairs(arr, n, sum);
 
 
// This code is contributed by Surbhi Tyagi
 
</script>


PHP




<?php
// PHP implementation of simple
// method to find print pairs
// with given sum.
 
// Returns number of pairs in
// arr[0..n-1] with sum equal
// to 'sum'
function printPairs($arr, $n, $sum)
{
    // Initialize result
    $count = 0;
 
    // Consider all possible
    // pairs and check their sums
    for ($i = 0; $i < $n; $i++)
        for ( $j = $i + 1; $j < $n; $j++)
            if ($arr[$i] + $arr[$j] == $sum)
                echo "(", $arr[$i], ", ",
                           $arr[$j], ")", "\n";
}
 
// Driver Code
$arr = array (1, 5, 7, -1, 5);
$n = sizeof($arr);
$sum = 6;
printPairs($arr, $n, $sum);
 
// This code is contributed by m_kit
?>


Output

(1, 5)
(1, 5)
(7, -1)



Time Complexity: O(N^2) where N is the number of elements.
Auxiliary Space: O(1)

Method 2 (Use hashing)
We create an empty hash table. Now we traverse through the array and check for pairs in the hash table. If a matching element is found, we print the pair number of times equal to the number of occurrences of the matching element. 
Note that the worst case of time complexity of this solution is O(c + n) where c is the count of pairs with a given sum.

C++




// C++ implementation of simple method to
// find count of pairs with given sum.
#include <bits/stdc++.h>
using namespace std;
 
// Returns number of pairs in arr[0..n-1]
// with sum equal to 'sum'
void printPairs(int arr[], int n, int sum)
{
    // Store counts of all elements in map m
    unordered_map<int, int> m;
 
    // Traverse through all elements
    for (int i = 0; i < n; i++) {
 
        // Search if a pair can be formed with
        // arr[i].
        int rem = sum - arr[i];
        if (m.find(rem) != m.end()) {
            int count = m[rem];
            for (int j = 0; j < count; j++)
                cout << "(" << rem << ", " << arr[i] << ")"
                     << endl;
        }
        m[arr[i]]++;
    }
}
 
// Driver function to test the above function
int main()
{
    int arr[] = { 1, 5, 7, -1, 5 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int sum = 6;
    printPairs(arr, n, sum);
    return 0;
}


Java




// Java implementation of simple method to
// find count of pairs with given sum.
import java.util.*;
 
class GFG {
 
    // Returns number of pairs in arr[0..n-1]
    // with sum equal to 'sum'
    static void printPairs(int arr[], int n, int sum)
    {
 
        // Store counts of all elements in map m
        HashMap<Integer, Integer> mp
            = new HashMap<Integer, Integer>();
 
        // Traverse through all elements
        for (int i = 0; i < n; i++) {
 
            // Search if a pair can be formed with
            // arr[i].
            int rem = sum - arr[i];
            if (mp.containsKey(rem)) {
                int count = mp.get(rem);
 
                for (int j = 0; j < count; j++)
                    System.out.print("(" + rem + ", "
                                     + arr[i] + ")"
                                     + "\n");
            }
            if (mp.containsKey(arr[i])) {
                mp.put(arr[i], mp.get(arr[i]) + 1);
            }
            else {
                mp.put(arr[i], 1);
            }
        }
    }
 
    // Driver code
    public static void main(String[] args)
    {
        int arr[] = { 1, 5, 7, -1, 5 };
        int n = arr.length;
        int sum = 6;
 
        printPairs(arr, n, sum);
    }
}
 
// This code is contributed by Princi Singh


Python3




# Python3 implementation of simple method to
# find count of pairs with given sum.
 
# Returns number of pairs in arr[0..n-1]
# with sum equal to 'sum'
 
 
def printPairs(arr, n, sum):
 
    # Store counts of all elements
    # in a dictionary
    mydict = dict()
 
    # Traverse through all the elements
    for i in range(n):
 
        # Search if a pair can be
        # formed with arr[i]
        temp = sum - arr[i]
 
        if temp in mydict:
            count = mydict[temp]
            for j in range(count):
                print("(", temp, ", ", arr[i],
                      ")", sep="", end='\n')
 
        if arr[i] in mydict:
            mydict[arr[i]] += 1
        else:
            mydict[arr[i]] = 1
 
 
# Driver code
if __name__ == '__main__':
 
    arr = [1, 5, 7, -1, 5]
    n = len(arr)
    sum = 6
 
    printPairs(arr, n, sum)
 
# This code is contributed by MuskanKalra1


C#




// C# implementation of simple method to
// find count of pairs with given sum.
using System;
using System.Collections;
using System.Collections.Generic;
 
class GFG {
 
    // Returns number of pairs in arr[0..n-1]
    // with sum equal to 'sum'
    static void printPairs(int[] arr, int n, int sum)
    {
 
        // Store counts of all elements in map m
        Dictionary<int, int> m = new Dictionary<int, int>();
 
        // Traverse through all elements
        for (int i = 0; i < n; i++) {
 
            // Search if a pair can be formed with
            // arr[i].
            int rem = sum - arr[i];
 
            if (m.ContainsKey(rem)) {
                int count = m[rem];
 
                for (int j = 0; j < count; j++) {
                    Console.Write("(" + rem + ", " + arr[i]
                                  + ")"
                                  + "\n");
                }
            }
 
            if (m.ContainsKey(arr[i])) {
                m[arr[i]]++;
            }
            else {
                m[arr[i]] = 1;
            }
        }
    }
 
    // Driver code
    public static void Main(string[] args)
    {
        int[] arr = { 1, 5, 7, -1, 5 };
        int n = arr.Length;
        int sum = 6;
 
        printPairs(arr, n, sum);
    }
}
 
// This code is contributed by rutvik_56


Javascript




<script>
      // JavaScript implementation of simple method to
      // find count of pairs with given sum.
      // Returns number of pairs in arr[0..n-1]
      // with sum equal to 'sum'
      function printPairs(arr, n, sum) {
        // Store counts of all elements in map m
        var m = {};
 
        // Traverse through all elements
        for (var i = 0; i < n; i++) {
          // Search if a pair can be formed with
          // arr[i].
          var rem = sum - arr[i];
 
          if (m.hasOwnProperty(rem)) {
            var count = m[rem];
 
            for (var j = 0; j < count; j++) {
              document.write("(" + rem + ", " + arr[i] + ")" + "<br>");
            }
          }
 
          if (m.hasOwnProperty(arr[i])) {
            m[arr[i]]++;
          } else {
            m[arr[i]] = 1;
          }
        }
      }
 
      // Driver code
      var arr = [1, 5, 7, -1, 5];
      var n = arr.length;
      var sum = 6;
 
      printPairs(arr, n, sum);
       
      // This code is contributed by rdtank.
    </script>


Output

(1, 5)
(7, -1)
(1, 5)



Time Complexity: O(N) where N is the number of elements in array
Auxiliary Space: O(N) due to map.

Method 3
Another method to Print all pairs with the given sum is given as follows: 

STEP BY STEP APPROACH : 

  1. Define a function pairedElements(arr, sum) that takes an array arr and a sum sum as input parameters.
  2. Initialize two variables low and high to 0 and len(arr) – 1 respectively.
  3. Start a while loop that continues as long as low is less than high.
  4. Inside the while loop, check if the sum of elements at indices low and high is equal to sum.
  5. If the sum is equal to sum, print the pair of elements at indices low and high.
  6. If the sum is greater than sum, decrement high by 1.
  7. If the sum is less than sum, increment low by 1.
  8. Return from the function.
  9. In the if __name__ == ‘__main__’: block, initialize an array arr with some integers.
  10. Sort the array arr in ascending order using the sort() method.
  11. Call the function pairedElements(arr, 6) to find pairs of elements that sum up to 6.
  12. The program prints the pairs of elements that sum up to 6.

C++




// C++ code to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;
 
void pairedElements(int arr[], int sum, int n)
{
    int low = 0;
    int high = n - 1;
 
    while (low < high) {
        if (arr[low] + arr[high] == sum) {
            cout << "The pair is : (" << arr[low] << ", "
                 << arr[high] << ")" << endl;
        }
        if (arr[low] + arr[high] > sum) {
            high--;
        }
        else {
            low++;
        }
    }
}
 
// Driver code
int main()
{
    int arr[] = { 2, 3, 4, -2, 6, 8, 9, 11 };
    int n = sizeof(arr) / sizeof(arr[0]);
    sort(arr, arr + n);
    pairedElements(arr, 6, n);
}
 
// This code is contributed by Rajput-Ji


Java




import java.util.Arrays;
 
/**
 * Created by sampat.
 */
public class SumOfPairs {
 
    public void pairedElements(int arr[], int sum)
    {
        int low = 0;
        int high = arr.length - 1;
 
        while (low < high) {
            if (arr[low] + arr[high] == sum) {
                System.out.println("The pair is : ("
                                   + arr[low] + ", "
                                   + arr[high] + ")");
            }
            if (arr[low] + arr[high] > sum) {
                high--;
            }
            else {
                low++;
            }
        }
    }
 
    public static void main(String[] args)
    {
        int arr[] = { 2, 3, 4, -2, 6, 8, 9, 11 };
        Arrays.sort(arr);
 
        SumOfPairs sp = new SumOfPairs();
        sp.pairedElements(arr, 6);
    }
}


Python3




# Python3 program for the
# above approach
 
 
def pairedElements(arr, sum):
 
    low = 0
    high = len(arr) - 1
 
    while (low < high):
        if (arr[low] +
                arr[high] == sum):
            print("The pair is : (", arr[low],
                  ", ", arr[high], ")")
        if (arr[low] + arr[high] > sum):
            high -= 1
        else:
            low += 1
 
 
# Driver code
if __name__ == '__main__':
 
    arr = [2, 3, 4, -2,
           6, 8, 9, 11]
    arr.sort()
    pairedElements(arr, 6)
 
# This code contributed by shikhasingrajput


C#




// C# program to find triplets in a given
// array whose sum is equal to given sum.
using System;
 
public class SumOfPairs {
 
    public void pairedElements(int[] arr, int sum)
    {
        int low = 0;
        int high = arr.Length - 1;
 
        while (low < high) {
            if (arr[low] + arr[high] == sum) {
                Console.WriteLine("The pair is : ("
                                  + arr[low] + ", "
                                  + arr[high] + ")");
            }
            if (arr[low] + arr[high] > sum) {
                high--;
            }
            else {
                low++;
            }
        }
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        int[] arr = { 2, 3, 4, -2, 6, 8, 9, 11 };
        Array.Sort(arr);
 
        SumOfPairs sp = new SumOfPairs();
        sp.pairedElements(arr, 6);
    }
}
 
// This code is contributed by Princi Singh


Javascript




<script>
 
        // Javascript code to implement
        // the above approach
        function pairedElements(arr, sum, n) {
            var low = 0;
            var high = n - 1;
 
            while (low < high) {
                if (arr[low] + arr[high] == sum) {
                    document.write("The pair is : (" +
                        arr[low] + ", " +
                        arr[high] + ")<br>");
                }
                if (arr[low] + arr[high] > sum) {
                    high--;
                }
                else {
                    low++;
                }
            }
        }
 
        // Driver code
        var arr = [ 2, 3, 4, -2, 6, 8, 9, 11]
        var n = arr.length;
        arr.sort(function(a,b){return a-b;});
        pairedElements(arr, 6, n);
 
 
    </script>


Output

The pair is : (-2, 8)
The pair is : (2, 4)



Time Complexity: O(N*logN) where N is the number of elements
Auxiliary Space: O(1)

Approach: Using Hashing

Steps:

  1. Initialize an empty hash set.
  2. Traverse through the array.
  3. For each element in the array, check if the difference between the sum and the current element exists in the hash set. If it exists, print the pair.
  4. Add the current element to the hash set.

C++




#include <iostream>
#include <unordered_set>
using namespace std;
 
void printPairs(int arr[], int n, int sum) {
    unordered_set<int> s;
    for (int i = 0; i < n; i++) {
        int temp = sum - arr[i];
        if (s.find(temp) != s.end()) {
            cout << "(" << temp << ", " << arr[i] << ")" << endl;
        }
        s.insert(arr[i]);
    }
}
 
int main() {
    int arr[] = {1, 5, 7, -1, 5};
    int sum = 6;
    int n = sizeof(arr)/sizeof(arr[0]);
    printPairs(arr, n, sum);
    return 0;
}


Java




import java.util.*;
 
public class Main {
     
    public static void printPairs(int[] arr, int n, int sum) {
        Set<Integer> s = new HashSet<>();
        for (int i = 0; i < n; i++) {
            int temp = sum - arr[i];
            if (s.contains(temp)) {
                System.out.println("(" + temp + ", " + arr[i] + ")");
            }
            s.add(arr[i]);
        }
    }
 
    public static void main(String[] args) {
        int[] arr = {1, 5, 7, -1, 5};
        int sum = 6;
        int n = arr.length;
        printPairs(arr, n, sum);
    }
}


Python3




def printPairs(arr, sum):
    s = set()
    for i in range(len(arr)):
        temp = sum - arr[i]
        if (temp in s):
            print("(", temp, ",", arr[i], ")")
        s.add(arr[i])
arr = [1, 5, 7, -1, 5]
sum = 6
printPairs(arr, sum)


C#




using System;
using System.Collections.Generic;
 
class Program
{
    static void PrintPairs(int[] arr, int n, int sum)
    {
        HashSet<int> s = new HashSet<int>();
        for (int i = 0; i < n; i++)
        {
            int temp = sum - arr[i];
            if (s.Contains(temp))
            {
                Console.WriteLine($"({temp}, {arr[i]})");
            }
            s.Add(arr[i]);
        }
    }
 
    static void Main(string[] args)
    {
        int[] arr = { 1, 5, 7, -1, 5 };
        int sum = 6;
        int n = arr.Length;
        PrintPairs(arr, n, sum);
    }
}


Javascript




function GFG(arr, sum) {
    // Create a Set to store unique values
    const set = new Set();
    // Iterate through the array
    for (let i = 0; i < arr.length; i++) {
        // Calculate the complement value to
        // achieve the desired sum
        const temp = sum - arr[i];
        // Check if the complement value exists in the Set
        if (set.has(temp)) {
            console.log(`(${temp}, ${arr[i]})`);
        }
        // Add the current element to the Set
        set.add(arr[i]);
    }
}
// Main function
function main() {
    // Input array
    const arr = [1, 5, 7, -1, 5];
    // Target sum
    const sum = 6;
    // Call the function to find and print pairs
    GFG(arr, sum);
}
main();


Output

( 1 , 5 )
( 7 , -1 )
( 1 , 5 )



Time Complexity: O(n)

Auxiliary Space: O(n)

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments