07 Longest Subarray with Ones after Replacement (hard) √

0

Problem Statement

Given an array containing 0s and 1s, if you are allowed to replace no more than ‘k’ 0s with 1s, find the length of the longest contiguous subarray having all 1s.

Example 1:

Input: Array=[0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1], k=2Output: 6Explanation: Replace the '0' at index 5 and 8 to have the longest contiguous subarray of 1s having length 6.

Example 2:

Input: Array=[0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1], k=3Output: 9Explanation: Replace the '0' at index 6, 9, and 10 to have the longest contiguous subarray of 1s having length 9.

    public static int findLength(int[] arr, int k) {
        HashMap<Integer, Integer> map = new HashMap<>();
        int start = 0;
        int result = Integer.MIN_VALUE;
        int currentMax = 0;
        for(int i = 0; i < arr.length; i++){
            int c = arr[i];
            map.put(arr[i],map.getOrDefault(c,0) + 1);
            currentMax = map.getOrDefault(1,0);
            if (currentMax + k < i - start + 1) {
                map.put(arr[start],map.getOrDefault(arr[start],0) - 1);
                start++;
            }
            result = Math.max(result, i - start + 1);

        }
        return result != Integer.MIN_VALUE ? result : -1;
    }