LeetCode Una pregunta por día 1004. El número máximo de 1 consecutivos III

1004. Número máximo de unos consecutivos III

Dada una matriz A que consta de varios 0 y 1, podemos cambiar hasta K valores de 0 a 1.

Devuelve la longitud de la submatriz más larga (contigua) que contiene solo 1.

Ejemplo 1:

输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出:6
解释: 
[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6

Ejemplo 2:

输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出:10
解释:
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10

inmediato:

  • 1 <= A. longitud <= 20000
  • 0 <= K <= A. longitud
  • A [i] es 0 o 1

Método uno: ventana deslizante

Ideas para resolver problemas

  • [left, right)Simulación de ventana deslizante con doble puntero
  • rightMueva el puntero hacia la derecha, al encontrar Kun 0tiempo, el valor del resultado del cálculo ret = max(ret, right - left)y mueve leftel puntero hacia la siguiente 0derecha .

Código de referencia

public int longestOnes(int[] A, int K) {
    
    
    int n = A.length;
    int ret = 0;
    int left = 0, right = 0, count = 0;
    while (right < n) {
    
    
        if (A[right] == 0) {
    
    
            if (count < K) {
    
    
                count++;
            } else {
    
    
                ret = Math.max(ret, right - left);
                do {
    
    
                    left++;
                } while (A[left - 1] == 1);
            }
        }
        right++;
    }
    return Math.max(ret, right - left);
}

Resultados de la
Inserte la descripción de la imagen aquí

  • Complejidad del tiempo: O (n)
  • Complejidad espacial: O (1)

Supongo que te gusta

Origin blog.csdn.net/qq_27007509/article/details/113858813
Recomendado
Clasificación