給你一個二進制數組 nums
,你需要從中刪掉一個元素。
請你在刪掉元素的結果數組中,返回最長的且只包含 1 的非空子數組的長度。
如果不存在這樣的子數組,請返回 0 。
提示 1:
輸入:nums = [1,1,0,1] 輸出:3 解釋:刪掉位置 2 的數後,[1,1,1] 包含 3 個 1 。
示例 2:
輸入:nums = [0,1,1,1,0,1,1,0,1] 輸出:5 解釋:刪掉位置 4 的數字後,[0,1,1,1,1,1,0,1] 的最長全 1 子數組爲 [1,1,1,1,1] 。
示例 3:
輸入:nums = [1,1,1] 輸出:2 解釋:你必須要刪除一個元素。
示例 4:
輸入:nums = [1,1,0,0,1,1,1,0,1] 輸出:4
示例 5:
輸入:nums = [0,0,0] 輸出:0
提示:
1 <= nums.length <= 10^5
nums[i]
要麼是0
要麼是1
。
C++
class Solution {
public:
int longestSubarray(vector<int>& nums)
{
int res=0;
int n=nums.size();
vector<int> tmp;
tmp.push_back(nums[0]);
int count=0;
if(nums[0])
{
count=1;
}
res=max(count,res);
int flag=0;
for(int i=1;i<n;i++)
{
if(0==nums[i])
{
flag=1;
if(nums[i-1])
{
tmp.push_back(count);
}
tmp.push_back(0);
}
else
{
if(nums[i-1])
{
count++;
res=max(res,count);
}
else
{
count=1;
}
}
}
if(nums[n-1])
{
tmp.push_back(count);
}
for(int i=1;i<tmp.size()-1;i++)
{
if(tmp[i-1] && tmp[i+1])
{
res=max(res,tmp[i-1]+tmp[i+1]);
}
}
if(0==flag)
{
res=n-1;
}
return res;
}
};