75. leetcode ordenar los colores clasificación de los colores tricolores / problemas holandeses del indicador Ideas rápidas fila

75. leetcode ordenar los colores clasificación de los colores tricolores / problemas holandeses del indicador Ideas rápidas fila


alimentación de CA no es cepillo de hebilla y AC, pero masticar cada pregunta, hay ideas pueden ser expresadas en la entrevista. Por supuesto, algunos ingenieros idea más noble es a algoritmo de pensamiento, con el fin de investigar la causa del campo de los algoritmos informáticos, aplausos!

tema:

Dado un rojo, blanco y azul, un total de n elementos de la matriz, los ordena in situ, de tal manera que los elementos adyacentes con el mismo color y dispuestos en un blanco, para rojo, azul. Esta pregunta, utilizamos un número entero de 0, 1 y 2 representan los colores rojo, blanco y azul.

Nota: No se puede utilizar la base de código de función de clasificación para resolver esta cuestión.

Ejemplo:
Entrada: [2,0,2,1,1,0]
de salida: [0,0,1,1,2,2]
avanzada: una solución sencilla es utilizar un algoritmo de exploración recuentos dos veces según.
En primer lugar, el cálculo iterativo de la cantidad de elementos 0, 1 y 2, y luego ordenadas 0,1,2, sobrescribiendo la matriz actual. Se puede pensar en una sola pasada, utilizando el espacio único algoritmo constante hacer?

ideas: Tricolor / tema bandera holandesa, pensando fila rápida:Para asegurar que la izquierda se deja 0, derecho es el derecho 2. k recorrido de izquierda a derecha, de derecha es correcto porque la fila ha sido bueno para él. Si nums [k] es 1, que está en el centro, que no requiere movimiento, k + 1 dispuesto para un continuar; si nums [k] es 0, la fila izquierda, izquierda + 1 demuestra la fila izquierda terminado, k + 1 Siguiente una fila de inferior; si nums [k] es 2, fila de la derecha, derecha-1 han demostrado la fila derecha sobre, pero el número de tamaño incierto transferido en esta posición, de modo que la posición de descarga de nuevo, k sin cambios.Escanear de nuevo.

detalles:

  1. Pit: k es menor que el derecho a la travesía
  2. Pit: necesidades izquierda + 1, a la derecha no requiere 1
  3. posiciones de cambio de elementos de la lista Python: lista [i], lista [j] = lista [j], lista [i]

código:

class Solution(object):
    def sortColors(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        left=0
        right=len(nums)-1
        k=0
        #保证left左面都是0,right右面都是2
        while k<=right: #right右边的是已经排完的了
            if nums[k]==1: #如果是1,就是中部的,不需要动,k+1继续排下一个
                k+=1
            elif nums[k]==0: #如果是0,排在左边,left+1证明左边的都排完了,k+1接着排下一个
                nums[left],nums[k]=nums[k],nums[left]
                left+=1
                k+=1
            else: #如果是2,排在右边,right-1证明右边的都排完了,但是不确定调到这个位置的数的大小,所以要再排该位置的
                nums[right],nums[k]=nums[k],nums[right]
                right-=1

Este blog es un trabajo original, la bienvenida a la orientación, reproduce, por favor indique la fuente, adjuntar un enlace a este artículo, gracias!

Publicado 20 artículos originales · ganado elogios 1 · visitas 192

Supongo que te gusta

Origin blog.csdn.net/weixin_43973433/article/details/104992547
Recomendado
Clasificación