列表

详情


NC204370. 牛牛的木板

描述

牛牛从牛毕那里拿了一根长度为n的白木板,木板被等分成了n段(没有被切割,只是虚拟划分成了n段),其中有些段被牛毕用颜料染成了黑色。

牛牛非常不喜欢黑色,它找来了一桶清洗剂决定对木板进行清洗,但是牛牛发现自己的清洗剂最多只能清洗m段。
清洗完后,牛牛会把木板锯成纯色的几段。例如假设木板是 (黑黑黑白白白白黑黑黑 ),就会被锯成(黑黑黑)(白白白白)(黑黑黑)三段。
牛牛想知道,它足够聪明地清洗木板,能获得的纯白色木板的最大长度是多少。



输入描述

给定n,m两个整数
和一个长度为n的数组a,为1表示白色,为0表示黑色
( ,  )
()

示例1

输入:

6,1, [1,0,0,1,1,1]

输出:

4

说明:

染成了[1,0,1,1,1,1]

示例2

输入:

6,2, [1,0,0,1,1,1]

输出:

6

说明:

染成了[1,1,1,1,1,1]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3(3.5.2) 解法, 执行用时: 3169ms, 内存消耗: 28472K, 提交时间: 2020-08-12 15:41:11

class Solution:
    def solve(self , n , m , a ):
        # write code here
        l,r=0,0
        num =0
        ans=0
        while r<n:
            num+=1-a[r]
            while num>m:
                num-=1-a[l]
                l+=1
            ans=max(ans,r-l+1)
            r+=1
        return ans

Python(2.7.3) 解法, 执行用时: 2991ms, 内存消耗: 26468K, 提交时间: 2020-08-06 22:18:10

#
# 
# @param n int整型 
# @param m int整型 
# @param a int整型一维数组 
# @return int整型
#
class Solution:

    def solve(self, n, m, A):
        i = 0
        for j in xrange(n):
            m -= A[j] ^ 1
            if m < 0:
                m += A[i] ^ 1
                i += 1
        return j - i + 1

C++11(clang++ 3.9) 解法, 执行用时: 151ms, 内存消耗: 22132K, 提交时间: 2020-08-07 10:57:32

class Solution {public:int solve(int n, int m, vector<int>& a) {int l=0,r=-1,ans=0;while(r!=n-1){if(a[r+1]||m)m-=!a[++r];else m+=!a[l++];ans=max(ans,r-l+1);}return ans;}};

上一题