A little bit lengthy but simple O(N) solution


#1
`vector<int> Solution::maxset(vector<int> &A) 

{
long long int i,sum=0,maxx=0,j,start,end,first,flag=0;
for(i=0;i<A.size();i++)
{
if(A[i]>=0)
flag=1;
}
if(flag==0)
return {};
for(i=0;i<A.size();i++)
{
if(A[i]>=0)
{
start=i;
sum=0;
while(i<A.size() && A[i]>=0)
{
sum+=A[i++];
}
if(maxx<=sum)
{
maxx=sum;
// std::cout<<“max=”<<maxx<<" “<<start<<” “<<i<<”–";
first=start;
end=i;
}
}
}
int len=0,maxi=0;
if(maxx==0)
{
vectorvec;
for(int i=0;i<A.size();i++)
{
while(A[i++]==0)
len++;
maxi=max(len,maxi);
}
for(i=0;i<maxi;i++)
vec.push_back(0);
return vec;
}
// cout<<maxx<<" ";
vectorans;
for(i=first;i<end;i++)
{
ans.push_back(A[i]);
}
return ans;
}
`