题目描述

给定一个由若干 0 和 1 组成的数组 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]
A[5] 和 A[10] 从 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]
A[4] 、A[5] 和 A[9] 从 0 翻转到 1,最长的子数组长度为 10。

提示

  • 1 <= A.length <= 20000
  • 0 <= K <= A.length
  • A[i] 为 0 或 1

题解

这题可以采用滑动窗口方法来求解。 也就是用头尾指针 l 和 r ,初始化都是 l = r = 0 ,然后向右移动指针 r 。 用变量 cnt0 记录 [l, r] 区间内有几个 0 ,用 res 保存答案。

如果 A[r] = 0 ,那就 0 的数量 cnt0 加 1 。 并且 0 的数量和 K 判断,如果 cnt0 <= K ,那就说明 [l, r] 中间的 0 不多,可以用至多 K 次机会填充,那就继续向右移动 r 。 但是如果 cnt0 > K ,那就说明 0 的数量太多了,得删掉点 0 了,这时候就得向右移动 l 。 这时候看情况,如果 A[l] = 0 ,就要减小 cnt0 ,直到 cnt0 <= K 为止,不再移动 l 。 然后继续移动 r ,重复上面过程即可。过程中时刻更新最长的距离 res 。

因为 l 和 r 分别最多移动 n 次,所以最终的时间复杂度是 的。

那么为什么这样是正确的呢?不会漏掉正确答案所在的区间吗? 我们看看漏掉的是哪些区间。 对于一个固定的 r ,移动 l 直到 0 的数量小于等于 K (记为 l' )的过程中,漏掉的是 [<l, r] 和 [>l', r] 这些区间。 前者 0 数量太多,不符合题意;后者长度更小,显然不是答案。 然后继续右移 r ,直到第一个 0 数量大于 K 的位置,漏掉了 [<l, >r] 和 [>l, >r] 区间。 前者 0 的数量一定大于 K ,为什么呢?因为右端点在 r 的时候, l 已经是最靠左使得 0 数量小于等于 K 的位置了,而现在 r 向右移动了, l 更不可能左移了;后者长度更小,不予考虑。 综上考虑,最优的区间一定被考虑充分了。

代码

        class Solution {public:int longestOnes(vector<int>& A, int K) {int n = A.size();int l = 0, r = 0, cnt0 = 0, res = 0;while (r < n) {if (!A[r]) {cnt0++;while (cnt0 > K && l <= r) {if (!A[l++]) cnt0--;}}res = max(res, r - l + 1);r++;}return res;}
};

每日算法系列【LeetCode 1004】最大连续1的个数 III相关推荐

  1. leetcode —— 1004. 最大连续1的个数 III

    给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 . 返回仅包含 1 的最长(连续)子数组的长度. 示例 1: 输入:A = [1,1,1,0,0,0,1,1,1, ...

  2. leetcode 1004. 最大连续1的个数 III(滑动窗口)

    给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 . 返回仅包含 1 的最长(连续)子数组的长度. 示例 1: 输入:A = [1,1,1,0,0,0,1,1,1, ...

  3. LeetCode 1004. 最大连续1的个数 III(双指针+滑动窗口)

    题目描述 给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 . 返回仅包含 1 的最长(连续)子数组的长度. 示例 1: 输入:A = [1,1,1,0,0,0,1 ...

  4. 2022-2-15 Leetcode 1004.最大连续1的个数III

    我的想法纠结于要计算出连续的 0 和连续 1 的子串的长度,然后再穷举组合. 其实只需要任意截取一段,看下这一段当中的 0 的个数是否大于 k. int longestOnes(vector<i ...

  5. 滑动窗口7:Leetcode 1004. 最大连续1的个数 III

    题目要求: 给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 . 返回仅包含 1 的最长(连续)子数组的长度. 示例 1:输入:A = [1,1,1,0,0,0,1 ...

  6. 【Leetcode数组--子数组--滑动窗口】209. 长度最小的子数组 904. 水果成篮 1004. 最大连续1的个数 III 76. 最小覆盖子串(有数组操作中重要的方法:滑动窗口!!!!)

    文章目录 Leetcode209 1.问题描述 2.解决方案 解法一:两个错误思路的算法 解法二:暴力 解法三:滑动窗口法(O(n)) Leetcode904 1.问题描述 2.解决方案 Leetco ...

  7. 1004. 最大连续1的个数 III

    题目 https://leetcode.cn/problems/max-consecutive-ones-iii/ 答案 https://leetcode.cn/problems/max-consec ...

  8. 重复次数最多的 子串_每日算法系列【LeetCode 424】替换后的最长重复字符

    题目描述 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 示例1 输入: s = &quo ...

  9. C++描述 LeetCode 485. 最大连续1的个数

    C++描述 LeetCode 485. 最大连续1的个数   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写博客,唯 ...

  10. 20191023:(leetcode习题)最大连续1的个数 III

    最大连续1的个数 III 题目 大致思路 代码实现 题目 给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 .返回仅包含 1 的最长(连续)子数组的长度. 输入:A ...

最新文章

  1. C语言学习笔记(一)_hello world
  2. sql 没有调试 菜单_MySQL递归查询上下级菜单
  3. (附)python3 只需3小时带你轻松入门——python常用一般性术语或词语的简单解释
  4. mysql low_case_MySQL8.0的坑之lower_case_table_names
  5. 【英语学习】【English L06】U05 Appointments L2 I'd like to make an airport shuttle service reservation
  6. python的基础_python基础知识,python必背内容,一、python的基
  7. mfc opengl 三维地形图_衢州三维动画制作传媒企业哪家好2020收费
  8. Scott Mitchell 的ASP.NET 2.0数据教程之十七:: 研究插入、更新和删除的关联事件
  9. EtherDream:在 JavaScript 中使用 C 程序
  10. logistic回归__基于Python和Numpy函数库
  11. oracle练习(mldn视频课程)四
  12. Java数组排序:Java sort()方法
  13. CrossApp简介
  14. pythonexcel怎么读_python怎么读excel
  15. RecyclerView实现吸顶效果---ItemDecoration
  16. 市场上各种深度摄像头测试之华捷艾米A100
  17. OSChina 周三乱弹 ——用程序员思维找妹子
  18. ROS(11)move_base详解
  19. Mac平台配置OpenGL(glut,glew)
  20. 零中频接收机频率转换图_【新品情报站】俄罗斯产VisAir HF DDC/DUC SDR 收发信机视频|接收机|转换器|ddc|天线|调谐器...

热门文章

  1. 文本文件编码探测几个链接
  2. 3.前端下载excel文件功能的三种方法
  3. list自定义排序工具类
  4. js 获取iframe页面元素
  5. zabbix安装笔记
  6. vmware实现小型局域网实验环境
  7. C++中的命名空间(namespace)介绍
  8. 运行roscore出现unable to contact my own server无法启动小海龟的部分故障问题解决
  9. 在SqlMapConfig.xml 中typeAliases与properties的关系
  10. Spring Boot后台启动不打印nohup.out