码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 滑动窗口实例3(最大连续1的个数Ⅲ)


    题目:

    给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。

    示例 1:

    输入:nums = [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:

    输入:nums = [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。

    提示:

    • 1 <= nums.length <= 105
    • nums[i] 不是 0 就是 1
    • 0 <= k <= nums.length

    算法原理:

    题目可以解析成另一层意思:求最长的子数组区间,要求区间内0的个数不超过k个

    若是连续区间,我们可以考虑用滑动窗口来解题

    滑动窗口其实就是同向双指针,left指针和right指针只会向前走,不会回退

    1 left=0(左边界) right=0(指向待加入窗口中的元素) zero变量统计区间中0出现的次数

    2 进窗口:right指向的元素如果是1,则right只管++,若是0,则zero++

    3 判断:若是当right指向的元素加入窗口后(nums[right]是0),zero超过k,则要出窗口了,即当前元素作为左边界能够延展的长度已是极限了,要换新的左边界

    4 出窗口:left不断++,直至zero不再超过k,停下来的left就是新的左边界

                      暴力解法中新的左边界直接就是下一个元素,但其实暴力解法枚举左边界的做法会枚举出毫无意义的情况,如

    代码实现:

     

    1. class Solution
    2. {
    3. public:
    4. int longestOnes(vector<int>& nums, int k)
    5. {
    6. int left = 0;
    7. int right = 0;
    8. int zero = 0;
    9. int n = nums.size();
    10. int ret = 0;
    11. while(right
    12. {
    13. if(nums[right]==0)//进窗口
    14. {
    15. zero++;
    16. }
    17. while(zero>k)//判断
    18. {
    19. if(nums[left++]==0)//出窗口
    20. {
    21. zero--;
    22. }
    23. }
    24. ret = max(ret,right-left+1);
    25. right++;
    26. }
    27. return ret;
    28. }
    29. };

  • 相关阅读:
    畅捷通+数环通iPaaS,实现无代码集成上千款应用
    SSM - Springboot - MyBatis-Plus 全栈体系(二十二)
    关于Redis集群的一些问题的理解
    WPF ContentControl 和 ContentPresenter 之间有什么区别
    (免费领源码)JavaWeb#Springboot#MYSQL跳蚤市场网络商城 99706-计算机毕业设计项目选题推荐
    ❤️新版Linux零基础快速入门到精通——第一部分❤️
    Deno 快速入门
    Tiktok上号称能拿百万年薪的Java性能调优笔记,我学完了先去试水
    idea中取消class文件显示所有方法的显示
    (附源码)springboot体检预约APP 计算机毕设16370
  • 原文地址:https://blog.csdn.net/weixin_73142957/article/details/132616550
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号