All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1001_1100.s1004_max_consecutive_ones_iii.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1001_1100.s1004_max_consecutive_ones_iii;

// #Medium #Array #Binary_Search #Prefix_Sum #Sliding_Window
// #2022_02_27_Time_3_ms_(79.01%)_Space_68.2_MB_(65.91%)

/**
 * 1004 - Max Consecutive Ones III\.
 *
 * Medium
 *
 * 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 most_ `k` `0`'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.
 *
 * **Constraints:**
 *
 * *   1 <= nums.length <= 105
 * *   `nums[i]` is either `0` or `1`.
 * *   `0 <= k <= nums.length`
**/
public class Solution {
    public int longestOnes(int[] a, int k) {
        int result = 0;
        int i = 0;
        for (int j = 0; j < a.length; j++) {
            if (a[j] == 0) {
                k--;
            }
            while (k < 0) {
                if (a[i] == 0) {
                    k++;
                }
                i++;
            }
            result = Math.max(result, j - i + 1);
        }
        return result;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy