Java 实现 连续 1 的最大个数:翻转最多 k 个 0

问题描述:

给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0,则返回数组中连续 1 的最大个数。

思路:

使用滑动窗口来维护连续的 1,同时记录当前窗口内 0 的个数,如果 0 的个数超过了 k,则需要移动左指针来减少 0 的个数。

具体实现:

  1. 初始化左右指针 left 和 right,以及 0 的个数 count。
  2. 当 right 指向的数字为 1 时,将 right 向右移动,同时更新连续 1 的个数。
  3. 当 right 指向的数字为 0 时,将 right 向右移动,同时将 count 加 1。
  4. 如果 count 大于 k,则需要移动 left 指针来减少 0 的个数。如果 left 指向的数字为 0,则将 count 减 1,同时将 left 向右移动。如果 left 指向的数字为 1,则直接将 left 向右移动。
  5. 每次移动指针时,更新连续 1 的最大个数。

代码实现:

public int findMaxConsecutiveOnes(int[] nums, int k) {
    int left = 0, right = 0, count = 0, maxCount = 0;
    while (right < nums.length) {
        if (nums[right] == 1) {
            right++;
            maxCount = Math.max(maxCount, right - left);
        } else {
            if (count < k) {
                right++;
                count++;
                maxCount = Math.max(maxCount, right - left);
            } else {
                if (nums[left] == 0) {
                    count--;
                }
                left++;
            }
        }
    }
    return maxCount;
}

示例:

nums = [1,0,1,1,0,1], k = 2

输出:4

解释:

翻转最多 2 个 0,可以得到最长的连续 1 的序列 [1,1,1,1],长度为 4。

Java 实现 连续 1 的最大个数:翻转最多 k 个 0

原文地址: https://www.cveoy.top/t/topic/fXt4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录