Java 实现 连续 1 的最大个数:翻转最多 k 个 0
Java 实现 连续 1 的最大个数:翻转最多 k 个 0
问题描述:
给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0,则返回数组中连续 1 的最大个数。
思路:
使用滑动窗口来维护连续的 1,同时记录当前窗口内 0 的个数,如果 0 的个数超过了 k,则需要移动左指针来减少 0 的个数。
具体实现:
- 初始化左右指针 left 和 right,以及 0 的个数 count。
- 当 right 指向的数字为 1 时,将 right 向右移动,同时更新连续 1 的个数。
- 当 right 指向的数字为 0 时,将 right 向右移动,同时将 count 加 1。
- 如果 count 大于 k,则需要移动 left 指针来减少 0 的个数。如果 left 指向的数字为 0,则将 count 减 1,同时将 left 向右移动。如果 left 指向的数字为 1,则直接将 left 向右移动。
- 每次移动指针时,更新连续 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。
原文地址: https://www.cveoy.top/t/topic/fXt4 著作权归作者所有。请勿转载和采集!