题解 | #牛群喂食计划#
牛群喂食计划
https://www.nowcoder.com/practice/7da784c2befa4c2aaef46e2e37c23aee
int numOfFeedPlans(vector<int>& nums, int k) {
int sum = 0, n=nums.size() ;
int l = 0 , res = 0 ;
for(int r = 0 ; r< n; r++ ){
if( nums[r] == 0 ) continue; // 0 不进入窗口
sum += nums[r];
while( l<r && sum > k ){
sum -= nums[l++] ;
while(l<r && nums[l] == 0 ){ // 收缩窗口排除0
l++ ;
}
}
if( sum == k ){
// 判断l左, r右侧 0的个数
int lz = 0 , rz = 0 , il = l-1 , ir = r+1 ;
while( il >=0 && nums[il] == 0 ){
lz++ ;
il--;
}
while( ir <n && nums[ir] == 0 ){
rz++ ;
ir++;
}
if( lz ==0 || rz == 0 ){
res += lz+rz+1 ;
}else{
res += (lz+1)*(rz+1) ;
}
}
}
return res;
}
