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 3Entrada: 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>
-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>
-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>
-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