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)
相关推荐
Coco_92642 分钟前
Hot100 动态规划
算法·动态规划
阿正的梦工坊8 分钟前
Sliding Window Attention(滑动窗口注意力)解析: Pytorch实现并结合全局注意力(Global Attention )
人工智能·pytorch·python
卑微的小鬼11 分钟前
golang的var ,make ,new, := 的区别
算法
喜-喜32 分钟前
Python pip 缓存清理:全面方法与操作指南
python·缓存·pip
rgb2gray32 分钟前
GeoHD - 一种用于智慧城市热点探测的Python工具箱
人工智能·python·智慧城市
01_1 小时前
力扣hot100 ——和为k的子数组 前后缀和(积)各种情况总结
数据结构·算法·leetcode·前后缀和(积)计算
一只码代码的章鱼1 小时前
数据结构与算法-搜索-双向搜索 和 A*算法(字串变换,八数码,第k短路)
算法
咚咚轩1 小时前
算法1-2 排序(快排)
算法
MZWeiei1 小时前
Matplotlib,Streamlit,Django大致介绍
python·django·matplotlib
楼台的春风1 小时前
【STM32 基于PID的闭环电机控制系统】
c语言·stm32·单片机·嵌入式硬件·mcu·物联网·算法