码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Python-算法编程100例-滑动窗口(入门级)


    题目1:最大连续1的个数(简单)

    给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

    解答:前缀和+双指针

    1. # 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
    2. from typing import List
    3. class Solution:
    4. def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
    5. idx_1 = []
    6. count_0 = [0] * len(nums)
    7. for i in range(len(nums)):
    8. if nums[i] == 1:
    9. idx_1.append(i)
    10. count_0[i] = i - len(idx_1) + 1
    11. left = 0
    12. right = 0
    13. max_len_1 = 0
    14. while right < len(idx_1):
    15. flaw_0 = count_0[idx_1[right]] - count_0[idx_1[left]]
    16. if flaw_0 == 0:
    17. max_len_1 = max(max_len_1, right-left+1)
    18. right += 1
    19. else:
    20. left += 1
    21. print(max_len_1)

    题目2:最大连续1的个数(中等)

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

    解答:滑动窗口-贪吃蛇-右边无脑滑动、坐边看情况收缩

    1. from typing import List
    2. # 贪吃蛇-右边无脑滑动、坐边看情况收缩
    3. class Solution:
    4. def longestOnes(self, nums: List[int], k: int) -> int:
    5. s = len(nums)
    6. left = 0
    7. count = 0
    8. max_len = 0
    9. for right in range(s):
    10. if nums[right] == 0:
    11. count += 1
    12. while count > k:
    13. # 结算
    14. max_len = max(max_len, right - left)
    15. if nums[left] == 0:
    16. count -= 1
    17. left += 1
    18. max_len = max(max_len, right - left + 1)
    19. print(max_len)

    题目3:最长空闲内存

    某系统中有一空间连续的内存,被划分成多个大小相同的内存块。内存的使用状态记录在字符串memory中,每个内存块状态用x或者.表示,
    # 其中x表示内存被使用,.表示内存空闲
    现在最多可以释放其中cnt个内存块(即将字符串中的x变成.),以获得一块空间连续的且最长的空闲内存,请计算并返回该最长空闲内存的内存块数量

    解答:动窗口-贪吃蛇-右边无脑滑动、坐边看情况收缩

    1. class Solution:
    2. def max_free_memory(self, memory, cnt):
    3. s = len(memory)
    4. left = 0
    5. count = 0
    6. max_len = 0
    7. for right in range(s):
    8. if memory[right] == "x":
    9. count += 1
    10. while count > cnt:
    11. # 结算
    12. max_len = max(max_len, right - left)
    13. if memory[left] == "x":
    14. count -= 1
    15. left += 1
    16. max_len = max(max_len, right - left + 1)
    17. print(max_len)

     

     

  • 相关阅读:
    【Flutter】Flutter 使用 RxDart 实现异步编程
    go 语言helloword
    element-ui问题合集(el-input-number加减一次就失效,el-select同时收集id与name)
    小程序列表下拉刷新和加载更多
    java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
    元宇宙 3D 开荒场 - 探味奇遇记
    Android Gradle8.0以上多渠道写法以及针对不同渠道导入包的方式,填坑!
    MySQL 基础篇(第04话):mysqld 和 mysql 命令的区别
    软件项目管理习题——软件生命周期
    springboot+mybatis-plus+element ui生成二维码
  • 原文地址:https://blog.csdn.net/wangchao2679/article/details/140004011
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号