题解 | #牛群喂食计划#

牛群喂食计划

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; 
    }

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务