Encuentre pares de valores positivos y negativos presentes en una array dada

Dada una array de enteros distintos , imprima todos los pares que tengan un valor positivo y un valor negativo de un número que existe en la array. Los pares se pueden imprimir en cualquier orden.

Ejemplos:  

Entrada:  arr[] = { 1, -3, 2, 3, 6, -1 }
Salida: -1 1 -3 3

Entrada:  arr[] = { 4, 8, 9, -4, 1, -1, -8, -9 }
Salida: -4 4 -8 8 -9 9 -1 1 

Método 1 (Simple: O(n 2 )): La idea es usar dos bucles anidados. Para cada elemento arr[i], encuentre el negativo de arr[i] del índice i + 1 a n – 1 y guárdelo en otra array. Para la salida, imprime el valor positivo negativo del elemento almacenado.

A continuación se muestra la implementación de este enfoque:  

C++

// Simple CPP program to find pairs of positive
// and negative values present in an array.
#include <bits/stdc++.h>
using namespace std;
 
// Print pair with negative and positive value
void printPairs(int arr[], int n)
{
    vector<int> v;
 
    // For each element of array.
    for (int i = 0; i < n; i++)
 
        // Try to find the negative value of
        // arr[i] from i + 1 to n
        for (int j = i + 1; j < n; j++)
 
            // If absolute values are equal print pair.
            if (abs(arr[i]) == abs(arr[j]))
                v.push_back(abs(arr[i]));
 
    // If size of vector is 0, therefore there is no
    // element with positive negative value, print "0"
    if (v.size() == 0)
        return;
 
    // Print the pair with negative positive value.
    for (int i = 0; i < v.size(); i++)
        cout << -v[i] << " " << v[i] << " ";
}
 
// Driven Program
int main()
{
    int arr[] = { 4, 8, 9, -4, 1, -1, -8, -9 };
    int n = sizeof(arr) / sizeof(arr[0]);
    printPairs(arr, n);
    return 0;
}

Java

// Java program to find pairs of positive
// and negative values present in an array.
import java.lang.*;
import java.util.*;
 
class GFG {
 
    // Print pair with negative and positive value
    public static void printPairs(int arr[], int n)
    {
        Vector<Integer> v = new Vector<Integer>();
        // For each element of array.
        for (int i = 0; i < n; i++)
 
            // Try to find the negative value of
            // arr[i] from i + 1 to n
            for (int j = i + 1; j < n; j++)
 
                // If absolute values are equal
                // print pair.
                if (Math.abs(arr[i]) == Math.abs(arr[j]))
                    v.add(Math.abs(arr[i]));
 
        // If size of vector is 0, therefore there
        // is no element with positive negative
        // value, print "0"
        if (v.size() == 0)
            return;
 
        // Print the pair with negative positive
        // value.
        for (int i = 0; i < v.size(); i++)
            System.out.print(-v.get(i) + " " + v.get(i)
                             + " ");
    }
 
    // Driven Program
    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 Prasad Kshirsagar.

Python 3

# Simple Python 3 program to find
# pairs of positive and negative
# values present in an array.
 
# Print pair with negative and
# positive value
 
 
def printPairs(arr, n):
    v = []
 
    # For each element of array.
    for i in range(n):
 
        # Try to find the negative value
        # of arr[i] from i + 1 to n
        for j in range(i + 1, n):
 
            # If absolute values are
            # equal print pair.
            if (abs(arr[i]) == abs(arr[j])):
                v.append(abs(arr[i]))
 
    # If size of vector is 0, therefore
    # there is no element with positive
    # negative value, print "0"
    if (len(v) == 0):
        return
 
    # Print the pair with negative
    # positive value.
    for i in range(len(v)):
        print(-v[i], "", v[i], end=" ")
 
 
# 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 ChitraNayal

C#

// C# program to find pairs of positive
// and negative values present in an array.
using System;
using System.Collections.Generic;
 
class GFG {
 
    // Print pair with negative and positive value
    public static void printPairs(int[] arr, int n)
    {
        List<int> v = new List<int>();
 
        // For each element of array.
        for (int i = 0; i < n; i++)
 
            // Try to find the negative value of
            // arr[i] from i + 1 to n
            for (int j = i + 1; j < n; j++)
 
                // If absolute values are equal
                // print pair.
                if (Math.Abs(arr[i]) == Math.Abs(arr[j]))
                    v.Add(Math.Abs(arr[i]));
 
        // If size of vector is 0, therefore there
        // is no element with positive negative
        // value, print "0"
        if (v.Count == 0)
            return;
 
        // Print the pair with negative positive
        // value.
        for (int i = 0; i < v.Count; i++)
            Console.Write(-v[i] + " " + v[i] + " ");
    }
 
    // 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 has been contributed by 29AjayKumar

Javascript

<script>
// Javascript program to find pairs of positive
// and negative values present in an array.
     
    // Print pair with negative and positive value
    function printPairs(arr,n)
    {
        let  v = [];
         
        // For each element of array.
        for (let i = 0; i < n; i++)
  
            // Try to find the negative value of
            // arr[i] from i + 1 to n
            for (let j = i + 1; j < n; j++)
  
                // If absolute values are equal
                // print pair.
                if (Math.abs(arr[i]) ==
                                  Math.abs(arr[j]))
                    v.push(Math.abs(arr[i]));
  
  
        // If size of vector is 0, therefore there
        // is no element with positive negative
        // value, print "0"
        if (v.length == 0)
            return; 
             
        // Print the pair with negative positive
        // value.
        for (let i = 0; i < v.length; i++)
            document.write(-v[i] + " "
                          + v[i] + " ");
    }
     
    // Driven Program
    let arr=[4, 8, 9, -4, 1, -1, -8, -9];
    let n = arr.length;
    printPairs(arr, n);
     
    // This code is contributed by rag2127
</script>
Producción

-4 4 -8 8 -9 9 -1 1 

Complejidad temporal: O(n*n)
Espacio auxiliar: O(n)

Método 2 (Hashing):

La idea es usar hashing. Atraviese la array dada, aumente el conteo en el valor absoluto de la tabla hash. Si la cuenta se convierte en 2, almacene su valor absoluto en otro vector. Si el tamaño del vector es 0, imprima «0», de lo contrario, para cada término en el vector, imprima primero su valor negativo y el valor positivo.

A continuación se muestra la implementación de este enfoque:

C++

// Efficient CPP program to find pairs of
// positive and negative values present in
// an array.
#include <bits/stdc++.h>
using namespace std;
// Print pair with negative and positive value
void printPairs(int arr[], int n)
{
    vector<int> v;
    unordered_map<int, bool> cnt;
 
    // For each element of array.
    for (int i = 0; i < n; i++) {
 
        // If element has not encounter early,
        // mark it on cnt array.
        if (cnt[abs(arr[i])] == 0)
            cnt[abs(arr[i])] = 1;
 
        // If seen before, push it in vector (
        // given that elements are distinct)
        else {
            v.push_back(abs(arr[i]));
            cnt[abs(arr[i])] = 0;
        }
    }
 
    if (v.size() == 0)
        return;
 
    for (int i = 0; i < v.size(); i++)
        cout << "-" << v[i] << " " << v[i] << " ";
}
 
// Driven Program
int main()
{
    int arr[] = { 4, 8, 9, -4, 1, -1, -8, -9 };
    int n = sizeof(arr) / sizeof(arr[0]);
 
    printPairs(arr, n);
 
    return 0;
}

Java

// Efficient Java program to find pairs of
// positive and negative values present in
// an array.
import java.util.*;
class GFG {
    // Print pair with negative
    // and positive value
    static void printPairs(int arr[], int n)
    {
        ArrayList<Integer> v = new ArrayList<Integer>();
        HashMap<Integer, Integer> cnt
            = new HashMap<Integer, Integer>();
        // For each element of array.
        for (int i = 0; i < n; i++) {
            // If element has encounter early,
            // then increment its count
            if (cnt.containsKey(Math.abs(arr[i])))
                cnt.put(Math.abs(arr[i]),
                        cnt.get(Math.abs(arr[i])) + 1);
            // If element has not seen before,
            // then initialize its count to 1
            else {
                cnt.put(Math.abs(arr[i]), 1);
            }
            if (cnt.get(Math.abs(arr[i])) == 2) {
                v.add(Math.abs(arr[i]));
            }
        }
        if (v.size() == 0)
            return;
 
        for (int i = 0; i < v.size(); i++)
            System.out.print("-" + v.get(i) + " " + v.get(i)
                             + " ");
    }
    // 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 Prerna Saini

Python3

# Efficient Python3 program to find pairs of
# positive and negative values present in
# an array.
# Print pair with negative and
# positive value
 
 
def printPairs(arr, n):
 
 
s = set()
ret = []
 
# For each element of array.
for i in arr:
if abs(i) in s:
ret.append(abs(i))
else:
s.add(abs(i))
 
ret.sort()
 
for i in range(0, len(ret)):
print(-ret[i], "", ret[i], end=" ")
# 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 RohitOberoi

C#

// Efficient C# program to find pairs of
// positive and negative values present in
// an array.
using System;
using System.Collections.Generic;
class GFG {
 
    // Print pair with negative and positive value
    static void printPairs(int[] arr, int n)
    {
        List<int> v = new List<int>();
        Dictionary<int, bool> cnt
            = new Dictionary<int, bool>();
 
        // For each element of array.
        for (int i = 0; i < n; i++) {
 
            // If element has not encounter early,
            // mark it on cnt array.
            int absVal = Math.Abs(arr[i]);
            if (!cnt.ContainsKey(absVal)) {
                cnt[absVal] = true;
            }
            else if (cnt[absVal] == false) {
                cnt[absVal] = true;
            }
            else {
                v.Add(Math.Abs(arr[i]));
                cnt[absVal] = false;
            }
        }
 
        if (v.Count == 0)
            return;
 
        v.Sort();
        for (int i = 0; i < v.Count; i++)
            Console.Write(-v[i] + " " + v[i] + " ");
    }
    // Driver code
    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 divyeshrabadiya07

Javascript

<script>
// Efficient JavaScript program to find pairs of
// positive and negative values present in
// an array.
// Print pair with negative and positive value
function printPairs(arr,n)
{
let v = new Array();
let cnt = new Map();
// For each element of array.
for (let i = 0; i < n; i++) {
// If element has not encounter early,
// mark it on cnt array.
if (cnt.has(Math.abs(arr[i])) == false)
cnt.set(Math.abs(arr[i]) , 1);
// If seen before, push it in vector (
// given that elements are distinct)
else {
v.push(Math.abs(arr[i]));
cnt.delete(Math.abs(arr[i]));
}
}
if (v.length == 0)
return;
v.sort((a,b)=>a-b)
for (let i = 0; i < v.length; i++)
document.write(-v[i] + " " + v[i] + " ");
}
// Driven Program
let arr = [ 4, 8, 9, -4, 1, -1, -8, -9 ];
let n = arr.length;
printPairs(arr, n);
// This code is contributed by shinjanpatra.
</script>
Producción

-4 4 -1 1 -8 8 -9 9 

Complejidad temporal: O(n)
Espacio auxiliar: O(n)

Método 3 (Uso de conjuntos): La idea es usar un conjunto. Encuentra el negativo del número en el conjunto. Si sale, imprima ambos números y si no sale, agréguelo al conjunto.

A continuación se muestra la implementación de este enfoque:

C++

// Efficient CPP program to find pairs of
// positive and negative values present in
// an array.
#include <bits/stdc++.h>
using namespace std;
// Print pair with negative and positive value
void printPairs(int arr[], int n)
{
    unordered_set<int> hs;
    vector<int> ans;
    for (int i = 0; i < n; i++) {
        if (hs.find((arr[i]) * -1) != hs.end()) {
            if (arr[i] < 0) {
                cout << arr[i] << " ";
                cout << (arr[i] * -1) << " ";
            }
            else {
                cout << (arr[i] * -1) << " ";
                cout << arr[i] << " ";
            }
        }
        hs.insert(arr[i]);
    }
 
    return;
}
// Driven Program
int main()
{
    int arr[] = { 4, 8, 9, -4, 1, -1, -8, -9 };
    int n = sizeof(arr) / sizeof(arr[0]);
    printPairs(arr, n);
    return 0;
}

Java

// Efficient CPP program to find pairs of
// positive and negative values present in
// an array.
import java.util.*;
 
public class GFG {
    // Print pair with negative and positive value
    public static void printPairs(int[] arr, int n)
    {
        HashSet<Integer> hs = new HashSet<Integer>();
        ArrayList<Integer> ans = new ArrayList<Integer>();
        for (int i = 0; i < n; i++) {
            if (hs.contains((arr[i]) * -1)) {
                if (arr[i] < 0) {
                    System.out.print(arr[i]);
                    System.out.print(" ");
                    System.out.print((arr[i] * -1));
                    System.out.print(" ");
                }
                else {
                    System.out.print((arr[i] * -1));
                    System.out.print(" ");
                    System.out.print(arr[i]);
                    System.out.print(" ");
                }
            }
            hs.add(arr[i]);
        }
 
        return;
    }
    // Driven Program
    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 Aarti_Rathi

Python3

# Print pair with negative and positive value
def printPairs(arr,n):
 
    hs = set()
    ans = []
    for i in range(n):
        if (arr[i] * -1) in hs:
 
            if (arr[i] < 0):
                print(arr[i],end = " ")
                print((arr[i] * -1),end = " ")
 
            else:
                print((arr[i] * -1),end = " ")
                print(arr[i],end = " ")
 
        hs.add(arr[i])
 
    return
 
# Driven Program
arr = [ 4, 8, 9, -4, 1, -1, -8, -9 ]
n = len(arr)
printPairs(arr, n)
 
# This code is contributed by shinjanpatra.

Javascript

<script>
// Efficient JavaScript program to find pairs of
// positive and negative values present in
// an array.
// Print pair with negative and positive value
function printPairs(arr, n)
{
let hs = new Set();
let ans = new Array();
for(let i = 0 ; i < n ; i++ ){
if( hs.has((arr[i])*-1) == true){
if(arr[i] < 0){
document.write(arr[i]," ");
document.write((arr[i]*-1)," ");
}else{
document.write((arr[i]*-1)," ");
document.write(arr[i]," ");
}
}
hs.add(arr[i]) ;
}
 
return ;
}
// Driver Program
let arr = [ 4, 8, 9, -4, 1, -1, -8, -9 ];
let n = arr.length;
printPairs(arr, n);
// This code is contributed by shinjanpatra.
</script>
Producción

-4 4 -1 1 -8 8 -9 9 

Complejidad temporal: O(n)
Espacio auxiliar: O(n)

Este artículo es una contribución de Anuj Chauhan . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *