Dada una matriz de números y una constante k, ¿minimizar el tamaño de la matriz con las siguientes reglas para eliminar elementos? (Más detalles en la primera respuesta).

Repitiendo la pregunta aquí, debido al espacio limitado para explicar la pregunta.

Dada una matriz de números y una constante k, minimice el tamaño de la matriz con las siguientes reglas para eliminar elementos.

Se pueden eliminar exactamente tres elementos de una vez.

Los tres elementos eliminados deben estar adyacentes en la matriz, es decir, arr [i], arr [i + 1], arr [i + 2]. Y el segundo elemento debe ser k mayor que el primero y el tercer elemento debe ser k mayor que el segundo, es decir, arr [i + 1] – arr [i] = k y arr [i + 2] -arr [i + 1] = k.

Mi solución:

———————————

1. Detecte un caso en el que tengamos un conflicto de qué lado fusionar, por ejemplo:

(2 3 4 5 6), puede fusionar 2 3 4, de modo que solo quede 5 6 al final O

Combina 4 5 6, de modo que solo quede 2 3 al final.

Entonces este es un caso de conflicto. Y para todos los casos de conflicto hacemos lo siguiente.

Sea X la pieza central del subconjunto de 5 que forma parte del conflicto, por lo que 4 en el ejemplo anterior:

si A [x] = A [x + 3], fusionar en el lado derecho, por ejemplo:

si tenemos una matriz original como (2 3 4 5 6 4), entonces combinar 4 5 6 primero dará un mejor resultado y luego combinar 2 3 4, ya que una vez que se elimina 4 5 6, la matriz se convierte en 2 3 4, que puede ser completamente eliminado

si A [x] = A [x-3], fusionar en el lado izquierdo. La misma lógica que la anterior, justo a la izquierda.

y si A [X] = A [X + 3] = A [x-3], podemos combinar y eliminar en cualquier lado.

——————————————-

En general, todos están resolviendo esto usando DP, ¿realmente necesitamos DP aquí? ¿Mi enfoque fallará en cualquier caso?

Esta pregunta es de CodeJam, enlace a continuación.

Panel de control – Prueba APAC de ronda B – Google Code Jam

Descargo de responsabilidad: no soy un desarrollador de competencia o un gurú de algoritmos.

A primera vista, el problema parece ser muy similar a varias soluciones de juego que pueden resolverse con un algoritmo de retroceso.

Paso 1: Encuentre todos los grupos adyacentes de 3 donde A [i + 2] – A [i + 1] = A [i + 1] – A [i] = k

(O en el juego hablar todos los movimientos posibles)

Paso 2: elimine uno de los grupos identificados en el Paso 1 que no hemos eliminado antes

(Aplicar el movimiento)

Paso 3: Repita 1,2 hasta que no sea posible mover más y registre los elementos que quedan en la matriz

(Juego terminado, no más movimientos posibles)

Paso 4: retroceda a un grupo que aún no se ha eliminado y repita desde 1

Paso 5: si se han verificado todas las eliminaciones de grupo posibles, informe el resultado más bajo

Nota: Puede detener el procesamiento de inmediato si los elementos restantes son 0, ya que no puede mejorarlo.


Para conjuntos de datos pequeños, puede implementar la solución de forma recursiva o puede usar una pila y hacer una copia de la matriz cada vez que elimine un grupo.

Para conjuntos de datos más grandes (que todavía caben en la memoria) se quedará sin memoria si realiza muchas copias de la matriz. En este caso, use una única estructura de datos a la que pueda eliminar y agregar elementos de manera eficiente. Quizás algún tipo de estructura arbórea.

¿Son preocupantes los conjuntos de datos que no caben en la memoria?

More Interesting

¿Qué son buenas para evaluar las entrevistas con algoritmos de codificación?

[Entrevista de diseño del sistema]: ¿Cuáles son las preguntas populares sobre el diseño del sistema que se hacen a los desarrolladores senior en compañías como Google o Facebook?

¿Existe algún criterio porcentual (para el 10 ° y 12 ° y BE) para obtener un trabajo en Amazon India?

¿Cuál es un plan de estudio sólido para convertirse en élite en la resolución de problemas de algoritmos para codificar entrevistas?

¿Crear una lista vinculada individualmente sin la prueba de head == nulo para inserción?

¿Google siempre hace preguntas de matemáticas en las entrevistas? ¿Qué áreas de matemáticas se solicitan típicamente?

¿Cuál es la solución recursiva para encontrar todos los subconjuntos de una matriz dada?

¿Cómo puedo convertir la lista [[1], [2], [3]] en [1, 2, 3] en Python? Básicamente, quiero que la lista sea aplanada.

No he recibido respuesta 2 meses después de una entrevista en una empresa de alta tecnología. ¿Tengo alguna posibilidad de conseguir el trabajo?

Cómo dar retroalimentación sobre una entrevista de programación que tuve en Uber

¿Hay una lista de tareas completa que necesito aprender antes de poder escribir 'Conocimiento (puede usar / implementar) de estructuras de datos y algoritmos' en mi currículum?

¿Cuál es la forma más eficiente de encontrar el késimo elemento más pequeño en un montón mínimo?

En programación de computadoras, ¿cómo leo las preguntas más rápido y comprendo mejor en TopCoder?

¿Cuáles son las preguntas generales que se hacen en las entrevistas de IPM?

¿Cómo debo responder a una pregunta de QA / Programación de prueba?