1493. Longest Subarray of 1's After Deleting One Element
Дан бинарный 配列 nums, из которого следует удалить один element.
return размер самой длинной непустой под配列ы, содержащей только 1, в результирующем 配列е. return 0, если такого под配列а не существует.
例:
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# 解法
照合済み/オリジナル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++ 解法
自動ドラフト、提出前に確認#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 解法
自動ドラフト、提出前に確認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 解法
照合済み/オリジナル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 для левой границы окна.
Итерация по 配列у:
При каждом elementе увеличиваем zeroCount, если это ноль.
Если zeroCount превышает 1, сокращаем окно, перемещая левую границу вправо и уменьшая zeroCount, пока количество нулей не станет меньше или равно 1.
Обновляем longestWindow текущей длиной окна i - start.
Возврат результата:
Вернуть longestWindow.
😎
Vacancies for this task
有効な求人 with overlapping task tags are 表示.