Given a binary array nums and an integer k, return the maximum number of consecutive 1's in the array if you can flip at mostk0's.
Example 1:
Input: nums = [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: nums = [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.
Solution:
publicintlongestOnes(int[] A,int K) {int max =0;int zeroCount =0; // zero count in current windowint i =0; // slow pointerfor(int j =0; j <A.length; ++j) {if(A[j] ==0) { // move forward j, if current is 0, increase the zeroCount zeroCount++; }// when current window has more than K, the window is not valid any more// we need to loop the slow pointer until the current window is validwhile(zeroCount > K) { if(A[i] ==0) { zeroCount--; } i++; } max =Math.max(max, j-i+1); // everytime we get here, the current window is valid }return max;}