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 punteroright
Mueva el puntero hacia la derecha, al encontrarK
un0
tiempo, el valor del resultado del cálculoret = max(ret, right - left)
y mueveleft
el puntero hacia la siguiente0
derecha .
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
- Complejidad del tiempo: O (n)
- Complejidad espacial: O (1)