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)
相关推荐
2601_962294614 小时前
python中range函数怎么用
python·for循环·可迭代对象·range函数·整数列表
青 春 记 忆5 小时前
零基础入门python70:Docker Compose 编排完整后端
python·后端开发
新时代牛马5 小时前
字符设备驱动完整篇:从 cdev_add、file_operations 到chrdev_open 与排障
开发语言·python
政企项目老覃6 小时前
大模型幻觉治理与自动评测:金融风控场景的落地实践
人工智能·算法·机器学习
淡海水6 小时前
08-03-不可变-ImmutableDictionary-TKey-TValue-与ImmutableHashSet-T-持久化哈希树
数据结构·算法·c#·哈希算法·dictionary·immutable
白山编程大哥6 小时前
Java OutputStreamWriter 详解:从字符到字节的桥梁
java·开发语言·python
hansang_IR6 小时前
【题解】[APIO2023] 赛博乐园 / cyberland
c++·算法·图论
洛阳纸贵7 小时前
MATLAB-matlab基础知识
学习·算法·matlab
落羽的落羽7 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法