Python-算法编程100例-滑动窗口(入门级)

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

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

解答:前缀和+双指针

python 复制代码
# 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。
from typing import List

class Solution:
    def findMaxConsecutiveOnes(self, nums: List[int]) -> int:
        idx_1 = []
        count_0 = [0] * len(nums)
        for i in range(len(nums)):
            if nums[i] == 1:
                idx_1.append(i)
                count_0[i] = i - len(idx_1) + 1

        left = 0
        right = 0
        max_len_1 = 0
        while right < len(idx_1):
            flaw_0 = count_0[idx_1[right]] - count_0[idx_1[left]]
            if flaw_0 == 0:
                max_len_1 = max(max_len_1, right-left+1)
                right += 1
            else:
                left += 1

        print(max_len_1)

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

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

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

python 复制代码
from typing import List
# 贪吃蛇-右边无脑滑动、坐边看情况收缩
class Solution:
    def longestOnes(self, nums: List[int], k: int) -> int:
        s = len(nums)
        left = 0
        count = 0
        max_len = 0
        for right in range(s):
            if nums[right] == 0:
                count += 1
            while count > k:
                # 结算
                max_len = max(max_len, right - left)
                if nums[left] == 0:
                    count -= 1
                left += 1
            max_len = max(max_len, right - left + 1)

        print(max_len)

题目3:最长空闲内存

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

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

python 复制代码
class Solution:
    def max_free_memory(self, memory, cnt):
        s = len(memory)
        left = 0
        count = 0
        max_len = 0
        for right in range(s):
            if memory[right] == "x":
                count += 1
            while count > cnt:
                # 结算
                max_len = max(max_len, right - left)
                if memory[left] == "x":
                    count -= 1
                left += 1
            max_len = max(max_len, right - left + 1)

        print(max_len)
相关推荐
程序媛一枚~1 小时前
✨✨✨使用Python,OpenCV及图片拼接生成❤️LOVE❤️字样图,每张小图加随机颜色边框,大图加随机大小随机颜色边框
图像处理·python·opencv·numpy·图像拼接
weixin_458872611 小时前
东华复试OJ二刷复盘2
算法
Charlie_lll1 小时前
力扣解题-637. 二叉树的层平均值
算法·leetcode
MediaTea1 小时前
Python:collections.Counter 常用函数及应用
开发语言·python
爱淋雨的男人1 小时前
自动驾驶感知相关算法
人工智能·算法·自动驾驶
如若1231 小时前
flash-attn 安装失败?从报错到成功的完整排雷指南(CUDA 12.8 + PyTorch 2.7)
人工智能·pytorch·python
007张三丰1 小时前
知乎高赞回答爬虫:从零开始,建立你的专属知识库
爬虫·python·知识库·python爬虫·知乎·高赞回答
wen__xvn1 小时前
模拟题刷题3
java·数据结构·算法
李昊哲小课2 小时前
Python json模块完整教程
开发语言·python·json
易醒是好梦2 小时前
Python flask demo
开发语言·python·flask