¿Por qué encontrar dos elementos con la diferencia mínima y la matriz le cuesta a O (nlogn, debido a la clasificación) mientras que es O (n, debido a DP) para encontrar elementos con la máxima diferencia?

Hola,

Me alegro de que quisieras hacer esta pregunta.

Lo que quiere preguntar es que cuando podemos encontrar la diferencia máxima en O (n) usando DP, entonces ¿por qué no podemos encontrar la diferencia mínima en O (n) por DP, ¿verdad?

Estoy avanzando asumiendo que he entendido su pregunta correctamente.

¡Considere este código para encontrar la máxima diferencia! Tenga en cuenta que en cada punto del tiempo, si mantenemos el elemento más pequeño y seguimos encontrando la máxima diferencia posible en cada paso, terminamos en O (n)

Hacemos un seguimiento de:
1. El elemento mínimo
2. La diferencia máxima encontrada hasta ahora

  int elemento_min = arr [0]; 
     int diff = arr [1] -arr [0]; 
     para (i = 1; i  diff) 
             diff = arr [i] -min_element; 
         if (arr [i] <elemento_min) 
             elemento_min = arr [i]; 
     } 
     return diff;

Por lo tanto, en este caso de máxima diferencia, solo necesitamos mantener el número más pequeño hasta ahora en cada paso.

Ahora considere el problema de la diferencia mínima.

Aquí, no podemos adoptar una forma similar, ya que mantener el elemento más grande y encontrar la diferencia (cosas similares a las anteriores) no necesariamente nos dará la mínima diferencia.

Por lo tanto, no nos queda otra opción que ordenar la matriz , la diferencia mínima sería la diferencia mínima entre 2 valores consecutivos.

Aquí está el código:

  Ordenar un
 minval = infinito 
 para i = 1 a N-1, inclusive 
     si minval> A [i] - A [i-1] entonces minval = A [i] - A [i-1] 
 imprimir minval

¡Salud!

Lea este artículo y obtenga la máxima diferencia de dos elementos en la matriz
código dado a continuación
clase pública max_diff_in_array {

public static void main (String [] args) {

int arr [] = {5,6,9,4,12,8,10,3,11};
int max = 0;
int x = 0, y = 0;
para (int i = 0; i para (int j = i + 1; j //System.out.println(diff);
si (max {
max = diff;
x = i;
y = j;
}
}
}

System.out.println (“max =” + max + “x =” + arr [x] + “y =” + arr [y]);

}
}

Encontrar la diferencia máxima no necesariamente requerirá que fuerce la fuerza bruta del algoritmo, de hecho, si queremos encontrar la diferencia de manera que un [j] -a [i] donde j> i, entonces tendríamos que rastrear el valor mínimo para un [ yo]. Tenga en cuenta que si se elimina la restricción j> i, todo lo que tenemos que hacer es llamar a std::find_max y std::find_min y deducir los dos valores, suponiendo que j> i entonces:

  int find_max_difference (const std :: vector  valores) {
 int max = 0;
 auto min = values.begin ();
 auto i = values.begin () + 1;
 while (i! = values.end ())
 {
 max = std :: max (max, * i- * min);
 si (* i <* min)
 min = i;
 ++ i; 
 } 
 retorno max; 
 }

Para el mínimo tenemos j donde j = i + i.

  int find_min_difference (const std :: vector  valores) {
 auto indx = values.begin ();
 auto indx2 = values.begin () + 1;
 int min = valores [0]; 
 int diff = std :: numeric_limits  :: max; 
 while (indx2! = values.end ())
  {
 diff = * indx2- * indx;
 si (diff 

More Interesting

¿Cuáles son las preguntas formuladas por L&T durante las entrevistas en el campus?

¿Está permitido usar papel y un bolígrafo durante una entrevista técnica para una empresa de tecnología de primer nivel?

¿Se "preparan" los entrevistadores para entrevistar candidatos?

¿Cuáles son algunas preguntas típicas de la base de datos para una entrevista con un ingeniero de software?

¿Cuáles son los temas en mecánica de los cuales se hacen preguntas en la entrevista NPCIL?

¿Por qué apesta la programación visual?

¿Qué debo decir cuando mi entrevistador pregunta las diferencias entre actividad y fragmento?

Dada una entrada 'n' del usuario, debe encontrar todos los números de la suerte del 1 al n. Los números de la suerte son aquellos que tienen 4 o 7 o ambos como dígitos. ¿Cuál es el método más eficiente para resolver este problema?

¿Qué debo elegir entre un trabajo en MNC y una pasantía en IIT?

Al hacer una entrevista técnica, ¿puedo decirle al entrevistador que olvidé los detalles de un algoritmo en particular y explicarle que realmente puedo resolver la pregunta si puedo buscarla en Google?

¿Abordas los problemas de codificación de entrevistas de manera diferente a los problemas reales?

¿Cuáles son las preguntas comunes de entrevista de desarrollador SQL de nivel básico?

Soy estudiante de ECE de primer año. Me voy a preparar mucho para una programación competitiva. ¿Google me considerará y me brindará una oportunidad de entrevista?

¿Cómo corrijo un error que cometió mi entrevistador en una entrevista telefónica con Google?

¿Qué debo esperar en la entrevista técnica para .NET en Skype de Microsoft Redmond?