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 分钟前
【Leetcode 每日一题 - 补卡】1534. 统计好三元组
数据结构·算法·leetcode
明月看潮生7 分钟前
青少年编程与数学 02-016 Python数据结构与算法 25课题、量子算法
python·算法·青少年编程·量子计算·编程与数学
水w9 分钟前
【Python爬虫】详细入门指南
开发语言·爬虫·python·scrapy·beautifulsoup
weixin_4450547214 分钟前
力扣刷题-热题100题-第35题(c++、python)
c++·python·leetcode
JNU freshman41 分钟前
C. Robin Hood in Town思考与理解
算法
_x_w1 小时前
【17】数据结构之图及图的存储篇章
数据结构·python·算法·链表·排序算法·图论
anscos1 小时前
Actran声源识别方法连载(二):薄膜模态表面振动识别
人工智能·算法·仿真软件·actran
pianmian11 小时前
arcgis几何与游标(1)
开发语言·python
冬天vs不冷2 小时前
SpringBoot条件注解全解析:核心作用与使用场景详解
java·spring boot·python
nanzhuhe2 小时前
python中参数前**的含义
开发语言·python