经验值:2000
时间限制:1000毫秒
内存限制:128MB
题目描述 Description
有一个数组A,数组元素只有0和1,我们最多可以将K个值从0变成1.请你输出仅包含1的最长(连续)数组的长度。
输入描述 Input Description
输入有两行
第一行 两个整数 分别是数组A的长度L和k的值,中间用空格隔开
第二行 数组A中的L个元素,中间用空格隔开
输出描述 Output Description
输出一个整数,表示最大长度
样例输入 Sample Input
【输入样例1】: 11 2 1 1 1 0 0 0 1 1 1 1 0 【输入样例2】: 19 3 0 0 1 1 0 0 1 1 1 0 1 1 0 0 0 1 1 1 1
样例输出 Sample Output
【输出样例1】: 6 【输出样例2】: 10
数据范围及提示 Data Size & Hint
1 <= L <= 10000000
0 <= K <= L
A[i] 为 0 或 1
滑动窗口
#include <iostream>
#include <vector>
using namespace std;
int maxConsecutiveOnes(vector<int>& nums, int k) {
int n = nums.size();
int maxLen = 0;
int left = 0, right = 0;
int zerosCount = 0;
while (right < n) {
if (nums[right] == 0) {
zerosCount++;
}
while (zerosCount > k) {
if (nums[left] == 0) {
zerosCount--;
}
left++;
}
maxLen = max(maxLen, right - left + 1);
right++;
}
return maxLen;
}
int main() {
int n, k;
cin >> n >> k;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
int maxLen = maxConsecutiveOnes(nums, k);
cout << maxLen << endl;
return 0;
}