Esto se puede hacer en O (n) usando hashmap.
Por ejemplo, consideremos que los elementos de la matriz son {5, 10, 3, 25, 2, 11, 17} y el producto es 50. Tenemos que encontrar todos los pares en la matriz que da 50 como producto.
Aquí las combinaciones son (5,10), (10,5), (25,2), (2,25). Veamos cómo podemos encontrar estas combinaciones en O (n) usando hashmap.
Use hashmap para almacenar los elementos de la matriz con su valor de cociente de respuesta dividiendo el valor del producto con el elemento de la matriz.
Por lo tanto, los valores de hashmap son:
10.0 = 5
5.0 = 10
16.666666 = 3
2.0 = 25
2.9411764 = 17
25.0 = 2
4.5454545 = 11
Ahora verifique si los elementos de la matriz están presentes en las claves de hashmap. Si es así, esas son las combinaciones que estamos buscando.
De nuestra matriz, 5,10,25,2 son los elementos que contiene la clave hashmap.
Para evitar pares duplicados, simplemente elimine la clave del hashmap, que es el valor de otra combinación de teclas, que encontramos anteriormente. Por ejemplo, (5,10) es la combinación, que obtuvimos primero. Ahora elimine la clave 10 del hashmap.
Aquí está mi código en Java:
package com.arun.twoproduct; import java.util.HashMap;
import java.util.Map; public class TwoProduct { public static void main(String[] args) { int[] arr = { 5, 10, 3, 25, 2, 11, 17 };
int product = 50;
findTwoProduct(arr, product); } private static void findTwoProduct(int[] arr, int product) {
HashMap map = new HashMap<>();
for (int i : arr) {
float val = (float) product / i;
map.put(val, i);
}
for (int i = 0; i < arr.length; i++) { if (map.containsKey((float) arr[i])) {
float toDelete = map.get((float) arr[i]);
System.out.println(arr[i] + "," + map.get((float) arr[i]) + " ");
map.remove(toDelete);
}
}
} }
package com.arun.twoproduct; import java.util.HashMap;
import java.util.Map; public class TwoProduct { public static void main(String[] args) { int[] arr = { 5, 10, 3, 25, 2, 11, 17 };
int product = 50;
findTwoProduct(arr, product); } private static void findTwoProduct(int[] arr, int product) {
HashMap map = new HashMap<>();
for (int i : arr) {
float val = (float) product / i;
map.put(val, i);
}
for (int i = 0; i < arr.length; i++) { if (map.containsKey((float) arr[i])) {
float toDelete = map.get((float) arr[i]);
System.out.println(arr[i] + "," + map.get((float) arr[i]) + " ");
map.remove(toDelete);
}
}
} }
package com.arun.twoproduct; import java.util.HashMap;
import java.util.Map; public class TwoProduct { public static void main(String[] args) { int[] arr = { 5, 10, 3, 25, 2, 11, 17 };
int product = 50;
findTwoProduct(arr, product); } private static void findTwoProduct(int[] arr, int product) {
HashMap map = new HashMap<>();
for (int i : arr) {
float val = (float) product / i;
map.put(val, i);
}
for (int i = 0; i < arr.length; i++) { if (map.containsKey((float) arr[i])) {
float toDelete = map.get((float) arr[i]);
System.out.println(arr[i] + "," + map.get((float) arr[i]) + " ");
map.remove(toDelete);
}
}
} }
package com.arun.twoproduct; import java.util.HashMap;
import java.util.Map; public class TwoProduct { public static void main(String[] args) { int[] arr = { 5, 10, 3, 25, 2, 11, 17 };
int product = 50;
findTwoProduct(arr, product); } private static void findTwoProduct(int[] arr, int product) {
HashMap map = new HashMap<>();
for (int i : arr) {
float val = (float) product / i;
map.put(val, i);
}
for (int i = 0; i < arr.length; i++) { if (map.containsKey((float) arr[i])) {
float toDelete = map.get((float) arr[i]);
System.out.println(arr[i] + "," + map.get((float) arr[i]) + " ");
map.remove(toDelete);
}
}
} }
package com.arun.twoproduct; import java.util.HashMap;
import java.util.Map; public class TwoProduct { public static void main(String[] args) { int[] arr = { 5, 10, 3, 25, 2, 11, 17 };
int product = 50;
findTwoProduct(arr, product); } private static void findTwoProduct(int[] arr, int product) {
HashMap map = new HashMap<>();
for (int i : arr) {
float val = (float) product / i;
map.put(val, i);
}
for (int i = 0; i < arr.length; i++) { if (map.containsKey((float) arr[i])) {
float toDelete = map.get((float) arr[i]);
System.out.println(arr[i] + "," + map.get((float) arr[i]) + " ");
map.remove(toDelete);
}
}
} }
package com.arun.twoproduct; import java.util.HashMap;
import java.util.Map; public class TwoProduct { public static void main(String[] args) { int[] arr = { 5, 10, 3, 25, 2, 11, 17 };
int product = 50;
findTwoProduct(arr, product); } private static void findTwoProduct(int[] arr, int product) {
HashMap map = new HashMap<>();
for (int i : arr) {
float val = (float) product / i;
map.put(val, i);
}
for (int i = 0; i < arr.length; i++) { if (map.containsKey((float) arr[i])) {
float toDelete = map.get((float) arr[i]);
System.out.println(arr[i] + "," + map.get((float) arr[i]) + " ");
map.remove(toDelete);
}
}
} }
package com.arun.twoproduct; import java.util.HashMap;
import java.util.Map; public class TwoProduct { public static void main(String[] args) { int[] arr = { 5, 10, 3, 25, 2, 11, 17 };
int product = 50;
findTwoProduct(arr, product); } private static void findTwoProduct(int[] arr, int product) {
HashMap map = new HashMap<>();
for (int i : arr) {
float val = (float) product / i;
map.put(val, i);
}
for (int i = 0; i < arr.length; i++) { if (map.containsKey((float) arr[i])) {
float toDelete = map.get((float) arr[i]);
System.out.println(arr[i] + "," + map.get((float) arr[i]) + " ");
map.remove(toDelete);
}
}
} }
package com.arun.twoproduct; import java.util.HashMap;
import java.util.Map; public class TwoProduct { public static void main(String[] args) { int[] arr = { 5, 10, 3, 25, 2, 11, 17 };
int product = 50;
findTwoProduct(arr, product); } private static void findTwoProduct(int[] arr, int product) {
HashMap map = new HashMap<>();
for (int i : arr) {
float val = (float) product / i;
map.put(val, i);
}
for (int i = 0; i < arr.length; i++) { if (map.containsKey((float) arr[i])) {
float toDelete = map.get((float) arr[i]);
System.out.println(arr[i] + "," + map.get((float) arr[i]) + " ");
map.remove(toDelete);
}
}
} }
package com.arun.twoproduct; import java.util.HashMap;
import java.util.Map; public class TwoProduct { public static void main(String[] args) { int[] arr = { 5, 10, 3, 25, 2, 11, 17 };
int product = 50;
findTwoProduct(arr, product); } private static void findTwoProduct(int[] arr, int product) {
HashMap map = new HashMap<>();
for (int i : arr) {
float val = (float) product / i;
map.put(val, i);
}
for (int i = 0; i < arr.length; i++) { if (map.containsKey((float) arr[i])) {
float toDelete = map.get((float) arr[i]);
System.out.println(arr[i] + "," + map.get((float) arr[i]) + " ");
map.remove(toDelete);
}
}
} }