Print all the pairs that contains the positive and negative values of an element

Given an array of distinct integers, print all the pairs having a positive value and negative value of a number that exists in the array.
Note: Order of the pairs doesn’t matter.

Examples:

Input: arr[] = { 1, -3, 2, 3, 6, -1 }
Output: -1 1 -3 3

Input: arr[] = { 4, 8, 9, -4, 1, -1, -8, -9 }
Output: -1 1 -4 4 -8 8 -9 9

A naive approach is to run two loops i.e. Consider each element of the array using the outer loop and search for its corresponding positive/negative value in the array using an inner loop. Similarly, find all the pairs. Time Complexity of this approach will be O( n2).



A better approach is to use sorting i.e. first sort the array and then for each negative element, do a binary search to find its counterpart (+ve number). If found, print that pair. If the current element is positive then break that loop as after that there will be all the positive numbers.

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find pairs of positive
// and negative values present in an array.
#include <bits/stdc++.h>
using namespace std;
  
void printPairs(int arr[], int n)
{
    bool pair_exists = false;
    // Sort the array
    sort(arr, arr + n);
  
    // Traverse the array
    for (int i = 0; i < n; i++) {
  
        // For every arr[i] < 0 element,
        // do a binary search for arr[i] > 0.
        if (arr[i] < 0) {
  
            // If found, print the pair.
            if (binary_search(arr, arr + n, -arr[i])) {
                cout << arr[i] << ", " << -arr[i] << endl;
  
                pair_exists = true;
            }
        }
  
        else
            break;
    }
  
    if (pair_exists == false)
        cout << "No such pair exists";
}
  
// Driver code
int main()
{
    int arr[] = { 4, 8, 9, -4, 1, -1, -8, -9 };
    int n = sizeof(arr) / sizeof(arr[0]);
  
    printPairs(arr, n);
  
    return 0;
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to find pairs 
// of positive and negative 
// values present in an array.
import java.util.*;
class GFG
{
static void printPairs(int arr[], int n)
{
    boolean pair_exists = false;
      
    // Sort the array
    Arrays.sort(arr);
  
    // Traverse the array
    for (int i = 0; i < n; i++) 
    {
  
        // For every arr[i] < 0 element,
        // do a binary search for arr[i] > 0.
        if (arr[i] < 0
        {
  
            // If found, print the pair.
            if (java.util.Arrays.binarySearch(arr, -arr[i])!=-1
            {
                System.out.println(arr[i] + ", " + -arr[i] );
  
                pair_exists = true;
            }
        }
  
        else
            break;
    }
  
    if (pair_exists == false)
        System.out.println("No such pair exists");
}
  
// Driver code
public static void main(String args[])
{
    int arr[] = { 4, 8, 9, -4, 1, -1, -8, -9 };
    int n =arr.length;
  
    printPairs(arr, n);
}
}
  
// This code is contributed
// by Arnab Kundu
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find pairs of positive 
# and negative values present in an array. 
  
# function for binary search
def binary_search(a, x, lo=0, hi=None):
    if hi is None:
        hi = len(a)
    while lo < hi:
        mid = (lo+hi)//2
        midval = a[mid]
        if midval < x:
            lo = mid+1
        elif midval > x: 
            hi = mid
        else:
            return mid
    return -1
  
def printPairs(arr, n): 
  
    pair_exists = False
    # Sort the array 
    arr.sort() 
  
    # Traverse the array 
    for i in range(n):
      
  
        # For every arr[i] < 0 element, 
        # do a binary search for arr[i] > 0. 
        if (arr[i] < 0): 
  
            # If found, print the pair. 
            if (binary_search(arr,-arr[i])): 
                print(arr[i] , ", " , -arr[i]) 
  
                pair_exists = True
          
          
  
        else:
            break
      
  
    if (pair_exists == False): 
        print("No such pair exists"
  
  
# Driver code 
if __name__=='__main__':
    arr = [ 4, 8, 9, -4, 1, -1, -8, -9
    n = len(arr) 
  
    printPairs(arr, n) 
      
# this code is contributed by ash264
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to find pairs 
// of positive and negative 
// values present in an array. 
  
using System;
public class GFG{
  
static void printPairs(int []arr, int n) 
    bool pair_exists = false
      
    // Sort the array 
    Array.Sort(arr); 
  
    // Traverse the array 
    for (int i = 0; i < n; i++) 
    
  
        // For every arr[i] < 0 element, 
        // do a binary search for arr[i] > 0. 
        if (arr[i] < 0) 
        
  
            // If found, print the pair. 
            if (Array.BinarySearch(arr, -arr[i])!=-1) 
            
                Console.WriteLine(arr[i] + ", " + -arr[i] ); 
  
                pair_exists = true
            
        
  
        else
            break
    
  
    if (pair_exists == false
        Console.WriteLine("No such pair exists"); 
  
// Driver code 
public static void Main() 
    int []arr = { 4, 8, 9, -4, 1, -1, -8, -9 }; 
    int n =arr.Length; 
  
    printPairs(arr, n); 
  
  
// This code is contributed by 29AjayKumar
chevron_right

Output:
-9, 9
-8, 8
-4, 4
-1, 1

Time Complexity: O(nlogn)

An efficient Approach is to use hashing. Below are the required steps:

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find pairs of positive
// and negative values present in an array
#include <bits/stdc++.h>
using namespace std;
  
// Function to print pairs of positive
// and negative values present in the array
void printPairs(int arr[], int n)
{
    unordered_set<int> pairs;
    bool pair_exists = false;
  
    // Store all the positive elements
    // in the unordered_set
    for (int i = 0; i < n; i++)
        if (arr[i] > 0)
            pairs.insert(arr[i]);
  
    // Start traversing the array
    for (int i = 0; i < n; i++) {
  
        // Check if the positive value of current
        // element exists in the set or not
        if (arr[i] < 0)
            if (pairs.find(-arr[i]) != pairs.end())
  
            { // Print that pair
                cout << arr[i] << ", " << -arr[i] << endl;
  
                pair_exists = true;
            }
    }
  
    if (pair_exists == false)
        cout << "No such pair exists";
}
  
// Driver code
int main()
{
    int arr[] = { 4, 8, 9, -4, 1, -1, -8, -9 };
    int n = sizeof(arr) / sizeof(arr[0]);
  
    printPairs(arr, n);
    return 0;
}
chevron_right

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program to find pairs of positive 
# and negative values present in an array 
  
# Function to print pairs of positive 
# and negative values present in the array 
def printPairs(arr, n): 
  
    pairs = set() 
    pair_exists = False
  
    # Store all the positive elements 
    # in the unordered_set 
    for i in range(0, n): 
        if arr[i] > 0
            pairs.add(arr[i]) 
  
    # Start traversing the array 
    for i in range(0, n): 
  
        # Check if the positive value of current 
        # element exists in the set or not 
        if arr[i] < 0:
            if (-arr[i]) in pairs: 
  
            # Print that pair 
                print("{}, {}".format(arr[i], -arr[i])) 
                pair_exists = True
  
    if pair_exists == False:
        print("No such pair exists")
  
# Driver code 
if __name__ == "__main__":
  
    arr = [4, 8, 9, -4, 1, -1, -8, -9
    n = len(arr) 
  
    printPairs(arr, n)
  
# This code is contributed by Rituraj Jain
chevron_right

Output:
-4, 4
-1, 1
-8, 8
-9, 9

Time Complexity: O(n)




A Coding Enthusiast Rails Developer

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.





Article Tags :