题目描述
给你一个01字符串,定义答案=该串中最长的连续1的长度,现在你有至多K次机会,每次机会可以将串中的某个0改成1,现在问最大的可能答案
输入描述:
输入第一行两个整数N,K,表示字符串长度和机会次数 ( 1 <= N <= 300000, 0 <= K <= N ) 第二行输入N个整数,表示该字符串的元素
输出描述:
输出一行表示答案
示例1
输入
10 2 1 0 0 1 0 1 0 1 0 1
输出
5
解法1:
子字符串由长到短,统计其中0的个数,如果0的个数小于等于k(修改机会数),则该子字符串的长度就是最大长度
n,k=map(int, input().split())
data="".join(input().split())
max_l=0
for l in range(len(data),k-1,-1):
for i in range(len(data)-l+1):
n_count=data[i:i+l].count('0')
if n_count<=k:
max_l=l
break
if max_l!=0:
break
print(max_l)
解法2:
从左向右统计有k个0的子字符串,保留最大长度值
N, K = map(int, input().strip().split())
nums = input().strip().split()
def test(nums,n,k):
res = k
num0 = nums[:k].count('0')
start = 0
for i in range(k,n):
if nums[i] == '0':
num0 += 1
if num0 <= k:
res = max(res, i-start+1)
elif nums[start] == '0':
num0 -= 1
start += 1
elif nums[start] == '1':
start += 1
return res
print(test(nums,N,K))