LeetCode Brushing Notes _75. Clasificación de colores

El tema es de LeetCode

75. Clasificación de colores

Se puede acceder a otras soluciones o código fuente: tongji4m3

descripción

Dada una matriz de n elementos que contienen rojo, blanco y azul, ordénelos en su lugar para que los elementos del mismo color estén adyacentes y dispuestos en el orden de rojo, blanco y azul.

En esta pregunta, usamos los números enteros 0, 1 y 2 para representar el rojo, el blanco y el azul, respectivamente.

Nota:
No puede utilizar la función de clasificación en el código base para resolver este problema.

Ejemplo:

输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]

Avanzado:

Una solución intuitiva es utilizar un algoritmo de escaneo de dos pasos para contar y clasificar.
Primero, calcule iterativamente el número de elementos 0, 1 y 2, y luego reescriba la matriz actual en el orden de 0, 1 y 2.
¿Puede pensar en un algoritmo de escaneo de una pasada que use solo espacio constante?

Ideas

Usando la idea de partición de clasificación rápida, defina punteros al principio y al final de la matriz, lo identifica el final de 0 (garantice que lo-1 debe ser 0) y hi identifica el comienzo de 2 (garantice que hi + 1 debe ser 2). Luego use el puntero i. Iterar sobre la matriz

Un mejor caso de prueba2 0 1 0 1 2

Código

public void sortColors(int[] nums)
{
    
    
    int lo=0,hi=nums.length-1;
    int i=0;
    while(i<=hi)
    {
    
    
        if(nums[i]==0)
        {
    
    
            //exch(nums,i++,lo++); 由于特殊性,化简
            nums[i++] = nums[lo];
            nums[lo++] = 0;
        }
        else if(nums[i]==1)
        {
    
    
            ++i;
        }
        else
        {
    
    
            //                exch(nums,i,hi--);
            nums[i] = nums[hi];
            nums[hi--] = 2;
        }

    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_42249196/article/details/108333165
Recomendado
Clasificación