【力扣每日一题:2-19】1004. 最大连续1的个数 III【中等】

简介: 【力扣每日一题:2-19】1004. 最大连续1的个数 III【中等】

题目链接

1004. 最大连续1的个数 III【中等】

题目简介

给定一个由若干 01 组成的数组 A,我们最多可以将 K 个值从 0 变成 1

返回仅包含 1 的最长(连续)子数组的长度。

示例 1:

输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出:6
解释: 
[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6。

实例2:

输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出:10
解释:
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10。

题目解析

  • 我们可以将K个值为0的转成K个值为1的,求一个连续数组,里面包含的1是最多的
  • 我们可以使用滑动窗口进行解决
  • 我们定义 leftright 分别代表滑动窗口的两端
  • right 主动右移:right 指针每次移动一步。当 A[right] 为 0,说明滑动窗口内增加了一个 0;
  • left 主动右移:判断此时窗口内 0 的个数,如果超过了 K,则 left 指针被迫右移,直至窗口内的 0 的个数小于等于 K 为止。
  • 每次都求出 max,返回即可

题目代码

class Solution {
    public int longestOnes(int[] A, int K) {
        int len = A.length;
        int left = 0;
        int right = 0;
        int res = 0;
        int sum = 0;
        while(right < len){
            // 记录当前滑动窗口内含有多少0
            if(A[right] == 0){
                sum++;
            }
            right++;
            // 如果当前滑动窗口中的 0 超过 K 个,则需要考虑 left 的坐标
            while(sum > K){
                // 如果下一个为 0 的话,则区间内需要去除一个 0 
                if(A[left] == 0){
                    sum--;
                }
                left++;
            }
            res = Math.max(res, right - left);
        }
        return res;
    }
}


相关文章
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
【Leetcode -746.使用最小花费爬楼梯 -747.至少是其他数字两倍的最大数】
77 0
|
8月前
【力扣】485.最大连续 1 的个数
【力扣】485.最大连续 1 的个数
|
8月前
|
人工智能
力扣每日一题 -- 2919. 使数组变美的最小增量运算数
力扣每日一题 -- 2919. 使数组变美的最小增量运算数
|
8月前
牛客网-最小的k个数
牛客网-最小的k个数
34 0
|
算法
【算法挨揍日记】day06——1004. 最大连续1的个数 III、1658. 将 x 减到 0 的最小操作数
1004. 最大连续1的个数 III 题目描述: 给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。
416 1
leetcode-每日一题1200. 最小绝对差
leetcode-每日一题1200. 最小绝对差
110 0
leetcode-每日一题1200. 最小绝对差
|
Python
LeetCode 447. 回旋镖的数量
给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。
90 0
|
C++
【力扣·每日一题】507. 完美数 (C++ 模拟 数的因子)
【力扣·每日一题】507. 完美数 (C++ 模拟 数的因子)
80 0
【力扣·每日一题】507. 完美数 (C++ 模拟 数的因子)
【力扣每日一题:8-04】611. 有效三角形的个数【中等】
【力扣每日一题:8-04】611. 有效三角形的个数【中等】
LeetCode每日一题——1200. 最小绝对差
给你个整数数组 arr,其中每个元素都 不相同。
125 0