删掉一个元素以后全为 1 的最长子数组
本文由旧博客内容整理迁入。原发布日期未提供,页面日期为本次整理日期。
题目
给你一个二进制数组 nums,你需要从中删掉一个元素。
请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组,请返回 0。
示例
示例 1
1 | 输入:nums = [1,1,0,1] |
解释:删掉位置 2 的数后,[1,1,1] 包含 3 个 1。
示例 2
1 | 输入:nums = [0,1,1,1,0,1,1,0,1] |
解释:删掉位置 4 的数字后,数组为 [0,1,1,1,1,1,0,1],最长全 1 子数组为 [1,1,1,1,1]。
示例 3
1 | 输入:nums = [1,1,1] |
解释:必须删除一个元素。
解题思路
这道题很有意思,处理方式也非常巧妙,但是依旧可以沿用不定长滑动窗口的做法。
维护一个最多包含一个 0 的窗口。因为必须删除一个元素,所以候选答案是窗口长度减一,即 right-left。即使整个窗口都是 1,也必须减一。
C++ 题解
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Decwoveh的学习周记!
评论
