Java实现 给定一个二进制数组 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;
}
``
原文地址: http://www.cveoy.top/t/topic/gDE5 著作权归作者所有。请勿转载和采集!