最长连续1(Max Consecutive Ones III)
Given an array A
of 0s and 1s, we may change up to K
values from 0 to 1.
Return the length of the longest (contiguous) subarray that contains only 1s.
Example 1:
Input: A = [1,1,1,0,0,0,1,1,1,1,0], K = 2 Output: 6 Explanation: [1,1,1,0,0,1,1,1,1,1,1] Bolded numbers were flipped from 0 to 1. The longest subarray is underlined.
Example 2:
Input: A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3 Output: 10 Explanation: [0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1] Bolded numbers were flipped from 0 to 1. The longest subarray is underlined.
Note:
1 <= A.length <= 20000
0 <= K <= A.length
A[i]
is0
or1
class Solution {
public:
int longestOnes(vector<int>& A, int k) {
if(A.empty()) return 0;
if( A.size() <= k) return k;
// i为左窗口起始,j为终止
int max_len = -1,i = 0;
for(int j = 0;j < A.size();j++){
if(A[j] == 0) k--;
if(k < 0){
if(A[i] == 0) k++;
i++;
}
max_len = max(max_len,j-i+1);
}
return max_len;
}
};