[Avance del tema del algoritmo] Punteros dobles: número máximo de 1 consecutivos III (11)

Tabla de contenido

1. Análisis de preguntas

2. Principio del algoritmo

3. Escritura de código

Escribe al final:


1. Análisis de preguntas

Enlace de pregunta: 1004. Número máximo de unos consecutivos III - Leetcode

Esta pregunta no es difícil de entender, de hecho, es encontrar el subarreglo continuo más largo de 1.

Sin embargo, admite una operación que consiste en convertir k 0 en 1.

Una vez que esta condición salió a la luz, la dificultad de esta pregunta aumentó y la situación se volvió más complicada. 

2. Principio del algoritmo

Entonces podemos pensar en cómo abstraer una regla:

Transforme este problema en: encuentre el subarreglo más largo con no más de k 0,

Si utiliza una enumeración violenta, la idea es relativamente simple.

Según la enumeración de fuerza bruta, podemos usar ventanas deslizantes para optimizar este problema.

De hecho, el paso más difícil: ya hemos terminado el problema de conversión, solo nos falta diseñar la ventana corrediza en base a esta idea.

Mantenemos una ventana,

Cuando el número de ceros es menor que 2, la ventana se expande continuamente,

Cuando el número de ceros es igual a 2, registramos el subarreglo más largo,

Cuando el número de ceros es mayor que 2, reducimos la ventana hasta que el número de ceros sea menor o igual a 2

Veamos el código:

3. Escritura de código

class Solution {
public:
    int longestOnes(vector<int>& nums, int k) {
        unordered_map<int, int> win;
        int len = 0, left = 0, right = 0;
        while(right < nums.size()) {
            len = max(len, right - left);
            win[nums[right++]]++;
            while(left < nums.size() && win[0] > k) {
                win[nums[left++]]--;
            }
        }
        len = max(len, right - left);
        return len;
    }
};

Escribe al final:

Ese es el contenido de este artículo, gracias por leer.

Si crees que has ganado algo, puedes darle un me gusta al blogger .

Si hay omisiones o errores en el contenido del artículo, envíe un mensaje privado al blogger o indíquelo en el área de comentarios ~

Supongo que te gusta

Origin blog.csdn.net/Locky136/article/details/131707287
Recomendado
Clasificación