Longest Run of Ones After One Deletion
Problem
Exactly one element must be deleted from a binary array. Return the longest run of 1s achievable in the result. Use a sliding window that allows at most one zero inside; the answer is (window length) − 1.
Input
nums = [1,1,0,1,1,1,0,1]Output
5Window [0..5] has length 6 with one zero — after deletion run length = 5.
def longest_after_delete(nums):
l = zeros = best = 0
for r, x in enumerate(nums):
if x == 0: zeros += 1
while zeros > 1:
if nums[l] == 0: zeros -= 1
l += 1
if r - l > best: best = r - l
return best
function longestAfterDelete(nums) {
let l = 0, zeros = 0, best = 0;
for (let r = 0; r < nums.length; r++) {
if (nums[r] === 0) zeros++;
while (zeros > 1) {
if (nums[l] === 0) zeros--;
l++;
}
if (r - l > best) best = r - l;
}
return best;
}
class Solution {
public int longestAfterDelete(int[] nums) {
int l = 0, zeros = 0, best = 0;
for (int r = 0; r < nums.length; r++) {
if (nums[r] == 0) zeros++;
while (zeros > 1) {
if (nums[l] == 0) zeros--;
l++;
}
if (r - l > best) best = r - l;
}
return best;
}
}
int longestAfterDelete(vector<int>& nums) {
int l = 0, zeros = 0, best = 0;
for (int r = 0; r < (int)nums.size(); r++) {
if (nums[r] == 0) zeros++;
while (zeros > 1) {
if (nums[l] == 0) zeros--;
l++;
}
if (r - l > best) best = r - l;
}
return best;
}