思路:

使用滑动窗口来维护连续的 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;
}
``
Java实现 给定一个二进制数组 nums 和一个整数 k如果可以翻转最多 k 个 0 则返回 数组中连续 1 的最大个数

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

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