llamadas mínimos en subArrayLeftShift método para clasificar array (pregunta de la entrevista)

Marca :

Suponga que tiene un método subArrayLeftShift(a,i)que desplazamientos a la izquierda del sub array a [i, ..., n-1] cuando n es la longitud de la matriz. Esto significa que los elementos a [i + 1], ..., a [n-1] se están moviendo de un lugar a la izquierda, y el de un original [i] se convertirá en el último.

Más formalmente, aquí está la implementación de la función:

public static void subArrayLeftShift(int[] a, int i){
  if (a.length == 0) return;

  int last = a.length - 1;
  int insertToLast = a[i];
  for (; i < last; i++){
      a[i] = a[i + 1];
  }
  a[last] = insertToLast;
}

Ahora la pregunta: implementar una función que recibe una matriz sin clasificar, y devuelve el número mínimo de llamadas a subArrayLeftShiftpara la clasificación de la matriz.

En la entrevista no pude encontrar la manera de hacerlo. Tengo éxito para encontrar el número mínimo de llamadas para cada ejemplo que escribí para la intuición, pero no pude encontrar una manera para que la generalización de la misma.

sabes como resolverlo?

niver:

Propongo el siguiente algoritmo para resolver el problema:

  • Encuentra el número mínimo de la matriz que no está ordenada (tiene un número menor de la derecha de la matriz). Deje que este número sea x .
  • Contar cuántos números de la matriz son mayores que el número previamente encontrado x . Deje que este número sea y .

Ya que para cada llamada a la función, el número clasificar va a terminar en la última posición, la estrategia óptima es llamar a la función para cada número no clasificados en orden creciente. El uso de lo que se encontró previamente empezamos con x . Continuamos con el siguiente número más grande que sin ordenar x, porque de esta manera, que va a terminar en la derecha de x , por lo tanto, serán ordenados. Continuar de la misma manera. ¿Cuánto cuesta? ¿Cuántas número más grande que x tenemos? Bueno, eso es y . Así como un total, el número de llamadas a la función es 1 + y .

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=202068&siteId=1
Recomendado
Clasificación