me he quedado atrapado en la solución de la siguiente pregunta práctica de la entrevista:
tengo que escribir una función:¿Cómo saber que existe un triángulo triple en nuestra matriz?
int triangle(int[] A);
que, dada una matriz cero indexada A que consiste en N
enteros devuelve 1
si existe un triple (P , Q, R) tal que 0 < P < Q < R < N
.
A[P] + A[Q] > A[R],
A[Q] + A[R] > A[P],
A[R] + A[P] > A[Q].
La función debe devolver 0
si tal triples no existe. Supongamos que 0 < N < 100,000
. Supongamos que cada elemento de la matriz es un número entero en el rango [-1,000,000..1,000,000]
.
Por ejemplo, dada array A
tales que
A[0]=10, A[1]=2, A[2]=5, A[3]=1, A[4]=8, A[5]=20
la función debe devolver 1
, porque la triple (0, 2, 4)
cumple todas las condiciones requeridas.
Para array A
tales que
A[0]=10, A[1]=50, A[2]=5, A[3]=1
la función debe devolver 0
.
Si hago un ciclo triple, esto sería muy, muy lento (complejidad: O(n^3)
). Estoy pensando en utilizar para almacenar una copia extra de la matriz y ordenarla, y utilizar una búsqueda binaria para un número en particular. Pero no sé cómo resolver este problema.
¿Alguna idea?
(0, 2, 4) no concuerda: 0 + 2 no es> 4. – Vlad
Menciona los números de índice como la respuesta ... 10, 5, 8 –
¿La primera condición se refiere a los valores? de PRQ o el índice? Porque, si P