solución Leetcode 75. Ordenar Colores

Planteamiento del problema 

Dada una matriz con  n  objetos de color rojo, blanco o azul, una especie de ellos  en el lugar  por lo que los objetos del mismo color son adyacentes, con los colores en el orden rojo, blanco y azul.

A continuación, vamos a utilizar los números enteros 0, 1 y 2 para representar el color rojo, blanco y azul, respectivamente.

Nota: No se supone que debe utilizar función de clasificación de la biblioteca para este problema.

Ejemplo:

Entrada: [2,0,2,1,1,0]
 Salida: [0,0,1,1,2,2]

Seguimiento:

  • Una solución bastante sencillo es un algoritmo de dos pasos usando conteo tipo.
    En primer lugar, iterate el número de matriz de conteo de 0 de, 1'S, y 2'S, entonces array sobrescritura con el número total de 0 de, luego 1 de y seguido de 2 de.
  • ¿Podría llegar a un algoritmo de una sola pasada, utilizando solamente el espacio constante?

 problema enlace

Tutorial de vídeo

Usted puede encontrar el video tutorial detallado aquí

Proceso de pensamiento

Este es el clásico problema nacional de la bandera holandesa. 

Dos pasadas con el espacio constante es fácil con recuento tipo. (Me recuerda a Radix clasificar de alguna manera) Una extensión sería lo que sucede si hay elementos de K (K> = 3)

Si hacerlo en una sola pasada, entonces la idea debe involucrar a los punteros y de intercambio. Empezar de izquierda a derecha, si es 1, pasar; si es 0, mover a la izquierda; si 2, mueva hacia la derecha

 

soluciones

pase de dos

1  público  void sortColorsCountingSort ( int [] A) {
 2      si (A == nula || a.length == 0) de retorno ;
3  
4      int [] cubos = nuevo  int [3 ];
5  
6      para ( int i = 0; i <a.length; i ++ ) {
 7          cubos [A [i]] + = 1 ;
8      }
 9  
10      int index = 0 ;
11      para ( int i = 0; i <3; i ++ ) {
 12          para( Int j = 0; j <cubos [i]; j ++ ) {
 13              A [index] = i;
14              índice ++ ;
15          }
 16      }
 17 }

 

Tiempo Complejidad: O (N), donde N es el tamaño de la matriz, N + 3 * N = 4 N = O (N)

Espacio Complejidad: O (1), ya que sólo necesitan 3 elementos en este caso, todavía se considera constante

 

 

Un pase

1  públicas  void sortColors ( int [] A) {
 2      si (A == nula || a.length == 0) de retorno ;
3  
4      int izquierda = 0 ;
5      int derecha = a.length - 1 ;
6  
7      int i = 0 ; 
8      , mientras que (i <= derecha) { // tiene que ser <=, ya que el valor cur todavía necesita ser evaluado si intercambiado espalda 
9          si (A [i] == 1 ) {
 10              i ++ ;
11          } demás  si(A [i] == 0 ) {
 12              swap (A, I, izquierda);
13              izquierda ++ ;
14              i ++; // no se olvide de éste, sólo podemos intercambiar 0 o 1 vuelta aquí, por lo que seguir adelante sin importar lo que 
15          } demás { // A [i] == 2 
16              swap (a, i, a la derecha);
17              derecha- ;
18          }
 19      }
 20 }

 

Tiempo Complejidad: O (N), donde N es el tamaño de la matriz

Espacio Complejidad: O (1)

referencias

Supongo que te gusta

Origin www.cnblogs.com/baozitraining/p/12501620.html
Recomendado
Clasificación