Dada una matriz entera y un número constante X, imprima todos los pares de números en la matriz cuyo producto es igual a X. Seguimiento: ¿cómo lo hará en O (n)? ¿Cómo manejarás los pares duplicados?

Lea la matriz, diga a [], y escriba otra matriz, diga b [], descartando todos los números en a [] que se encuentran en cualquiera de las siguientes categorías:
1. X% a [i]! = 0
2. X <a [i]

La matriz resultante b [] solo tendrá factores de X.

Mientras escribe esta nueva matriz b [] asegúrese de escribirla de forma ordenada, eliminando cualquier duplicado en el camino. Además, mantenga el recuento de elementos que escribe en la matriz y proceda solo si el número de elementos es mayor que 1.

Ahora use dos índices para leer la matriz: uno para el multiplicando (i) y el otro para el multiplicador (j). Haz lo siguiente:
1. Inicialice i con el primer subíndice de matriz (0 para C ++ / Java, etc.) y asigne j con el valor de subíndice i + 1.
2. Si b [i] xb [j] == X
Imprime y ve al paso 4.
De lo contrario, pasa a 5.
3. Si b [i] xb [j]> X
Hacer continuación.
De lo contrario, pasa a 5.
4. Incremente i, reinicialice j = i + 1 y vaya al paso 2 hasta el final de la matriz.
5. Incremente j y vaya a 2 hasta el final de la matriz.

Si estoy en el último índice de matriz, no quedará un multiplicador sin marcar. Entonces podemos terminar aquí.

Estoy seguro de que la solución anterior eliminaría escenarios duplicados. Pero no estoy seguro de si esta solución es la solución O para el caso.

Espero que esta respuesta sea satisfactoria. No he pensado mucho en el algoritmo, pero es la mejor solución que se me ocurre en este momento. Lo actualizaría a medida que tenga una mejor idea para resolverlo.

El requisito es encontrar un número adecuado para cualquier otro número. Podemos usar un Hash Map ya que las búsquedas no son costosas, O (1).

Digamos que la matriz dada es A y el producto deseado es X.

Mientras (iterar a través del índice i)
{
If (X% A [i] == 0 Y ExistInHashMap (HashMap, X / A [i])
{
print (i + “Y” + ValFromHashMap (HashMap, X / A [i]));
}
PutInHash (HashMap, A [i], i) // par de valores clave con clave como valor de matriz
}

Esta solución es O (N) porque realiza operaciones O (1) sobre N elementos.

Para evitar duplicados por valor, solo puede imprimir un valor de la tabla hash.

Usaremos la clasificación de cubo para la complejidad de tiempo O (N).

Para N números, la complejidad temporal será O (N)
* Suponiendo que N no es muy grande de modo que la memoria no se vea comprometida.

Una vez que se realiza la clasificación, simplemente atraviese la matriz ordenada, para cada número dividir X por ese número y si el número resultante está presente en la matriz (Use la Búsqueda Binaria para calcular la complejidad del Tiempo O (log N) imprima los dos números más continúe.

Todo se puede hacer en O (N)

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);
}
}
} }

Bien. Se puede hacer con HashSet en Java ya que Set es una implementación efectiva para manejar duplicados.

Aquí vamos..

pares de productos de clase pública {

public static void main (String [] args) {
printProductPairs (nuevo int [] {5, 10, 3, 25, 2, 11, 17}, 50);
}

private static void printProductPairs (int [] array, int value) {
Establezca hashSet = new HashSet ();
int pairElement = 0;
para (elemento int: matriz) {
if (valor% elemento == 0) {
hashSet.add (elemento);
}
}

for (Elemento entero: hashSet) {
pairElement = valor / elemento;
if (hashSet.contains (pairElement)) {
System.out.println (elemento + “,” + pairElement);
}
}

}

}

More Interesting

¿Cómo podemos encontrar si una matriz, arr [], tiene dos índices distintos, i y j, donde abs (a [j] - a [i]) <= L y abs (j - i) <= K en O ( N) tiempo y O (K) espacio?

¿Cómo puede un ingeniero de ECE aclarar la ronda de entrevistas técnicas?

¿Puedes sintaxis de Google durante una entrevista telefónica de codificación?

No entiendo los algoritmos en absoluto, ¿de dónde empiezo a aprenderlos? Me estoy preparando para una entrevista técnica.

Si soy ecológico en TopCoder, ¿puedo pasar entrevistas a las principales empresas tecnológicas? ¿La mayoría de las personas que aprueban las entrevistas tienen la capacidad de salir bien en las competencias de TopCoder? Si me fuera mejor en los concursos de TopCoder, ¿se transferirían las habilidades a las entrevistas?

¿Qué tipo de preguntas se pueden esperar en una entrevista técnica telefónica de 1 hora para el puesto de desarrollador de software en Yahoo?

¿Cuál es la mejor / (o peor) pregunta de la entrevista que le hayan hecho o que le hayan pedido un trabajo de programación o una pasantía (o una que esté poco relacionada con CS)?

¿Puedo buscar en Google o buscar recursos en línea durante la entrevista de programación?

¿Cómo organizaría (en el lugar) el siguiente elemento de la mitad del arreglo alternativamente entre el elemento de la primera mitad del arreglo?

¿Qué tipo de preguntas se hacen en Compro Technologies?

¿Cuáles son algunas buenas preguntas para la entrevista de JavaScript?

¿Alguien puede proporcionar un buen algoritmo para resolver esto con una complejidad lineal de tiempo?

Mañana tengo una entrevista para un puesto de ingeniero integrado (ver descripción). ¿Qué preguntas puedo esperar en general y en el aspecto técnico?

¿Cómo debo comenzar a prepararme para entrevistas SDET (Ingeniero de desarrollo de software en pruebas) para empresas de productos como Flipkart, Amazon, etc.?

¿Cómo se escribe una función para determinar el nodo en un árbol a la máxima profundidad, rompiendo los lazos con preferencia a los nodos más a la derecha?