NC204370. 牛牛的木板
描述
牛牛非常不喜欢黑色,它找来了一桶清洗剂决定对木板进行清洗,但是牛牛发现自己的清洗剂最多只能清洗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;}};