1493. Longest Subarray of 1's After Deleting One Element

El texto de la tarea se traduce del ruso para el idioma seleccionado. El código no cambia.

Дан бинарный arreglo nums, из которого следует удалить один element.

return размер самой длинной непустой подarregloы, содержащей только 1, в результирующем arregloе. return 0, если такого подarregloа не существует.

Ejemplo:

Input: nums = [0,1,1,1,0,1,1,0,1]

Output: 5

Explanation: After deleting the number in position 4, [0,1,1,1,1,1,0,1] longest subarray with value of 1's is [1,1,1,1,1].

C# solución

coincidente/original
public class Solution {
    public int LongestSubarray(int[] nums) {
        int zeroCount = 0;
        int longestWindow = 0;
        int start = 0;
        for (int i = 0; i < nums.Length; i++) {
            if (nums[i] == 0) {
                zeroCount++;
            }
            while (zeroCount > 1) {
                if (nums[start] == 0) {
                    zeroCount--;
                }
                start++;
            }
            longestWindow = Math.Max(longestWindow, i - start);
        }
        return longestWindow;
    }
}

C++ solución

borrador automático, revisar antes de enviar
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public int LongestSubarray(vector<int>& nums) {
        int zeroCount = 0;
        int longestWindow = 0;
        int start = 0;
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] == 0) {
                zeroCount++;
            }
            while (zeroCount > 1) {
                if (nums[start] == 0) {
                    zeroCount--;
                }
                start++;
            }
            longestWindow = max(longestWindow, i - start);
        }
        return longestWindow;
    }
}

Java solución

borrador automático, revisar antes de enviar
import java.util.*;
import java.math.*;

// Auto-generated Java draft from the C# solution. Review API differences before LeetCode submit.
public class Solution {
    public int LongestSubarray(int[] nums) {
        int zeroCount = 0;
        int longestWindow = 0;
        int start = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 0) {
                zeroCount++;
            }
            while (zeroCount > 1) {
                if (nums[start] == 0) {
                    zeroCount--;
                }
                start++;
            }
            longestWindow = Math.max(longestWindow, i - start);
        }
        return longestWindow;
    }
}

Go solución

coincidente/original
func longestSubarray(nums []int) int {
    zeroCount := 0
    longestWindow := 0
    start := 0

    for i := 0; i < len(nums); i++ {
        if nums[i] == 0 {
            zeroCount++
        }

        for zeroCount > 1 {
            if nums[start] == 0 {
                zeroCount--
            }
            start++
        }

        longestWindow = max(longestWindow, i - start)
    }

    return longestWindow
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

Algorithm

Инициализация переменных:

zeroCount для подсчёта нулей в текущем окне, longestWindow для хранения максимальной длины окна, содержащего не более одного нуля, и start для левой границы окна.

Итерация по arregloу:

При каждом elementе увеличиваем zeroCount, если это ноль.

Если zeroCount превышает 1, сокращаем окно, перемещая левую границу вправо и уменьшая zeroCount, пока количество нулей не станет меньше или равно 1.

Обновляем longestWindow текущей длиной окна i - start.

Возврат результата:

Вернуть longestWindow.

😎

Vacantes para esta tarea

Se muestran vacantes activas con etiquetas coincidentes.

Todas las vacantes
Todavía no hay vacantes activas.