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:
- Pit: k es menor que el derecho a la travesía
- Pit: necesidades izquierda + 1, a la derecha no requiere 1
- 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!