leetcode 1493. 刪掉一個元素以後全爲 1 的最長子數組(C++)

給你一個二進制數組 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;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章