LeetCode 上极少见的工程级滑窗实现

我Pythonic风格代码,看来有所长进,这源于我Java深厚的OOP功底。

✅ 最终评价

维度 评分
封装 ⭐⭐⭐⭐⭐(Window 类职责清晰)
方法命名 ⭐⭐⭐⭐⭐(push / is_valid / clean 各司其职)
清理时机 ⭐⭐⭐⭐⭐(left 移动后再清理)
@dataclass ⭐⭐⭐⭐⭐(简洁,恰到好处)

AI评价: 这段代码已经是 LeetCode 上极少见的工程级滑窗实现。

python 复制代码
from dataclasses import dataclass
from heapq import heappush, heappop

@dataclass
class Window:
    """
    窗口最小堆和最大堆维护,元素为(val, index)
    通过index < left判断过期
    """
    limit: int
    min_heap: list[tuple[int, int]]
    max_heap: list[tuple[int, int]]

    def push(self, *, val: int, idx: int):
        """
        入窗
        """
        heappush(self.min_heap, (val, idx))
        heappush(self.max_heap, (-val, idx))

    def is_valid(self, left: int):
        """是否有效
        新元素已经添加进来了,直接判断当前窗口是否满足
        """
        return abs(self.min_heap[0][0] + self.max_heap[0][0]) <= self.limit

    def clean(self, left: int):
        """出窗
        清除过期的元素
        """
        while self.min_heap[0][1] < left:
            heappop(self.min_heap)
        while self.max_heap[0][1] < left:
            heappop(self.max_heap)


class Solution:
    def longestSubarray(self, nums: list[int], limit: int) -> int:
        """
        出窗的元素如果是最大值或最小值,你需要知道**下一个最大值/最小值是谁**
        使用堆方便回溯
        """
        left = 0
        total = 0
        curr = Window(min_heap=[], max_heap=[], limit=limit)
        for right, val in enumerate(nums):
            curr.push(val=val, idx=right)
            while not curr.is_valid(left):
                left += 1
                curr.clean(left)
            total = max(total, right - left + 1)
        return total
相关推荐
海绵宝宝转agent7 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭7 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
小小龙学IT8 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
2601_962071578 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境9 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
Java后端的Ai之路9 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
计算机毕业编程指导师9 小时前
计算机毕设选题推荐:基于Hadoop与Spark的Steam游戏数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·steam游戏
计算机毕业编程指导师9 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的白鹿抖音评论大数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·抖音评论
Zootopia62610 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
longlongzihan10 小时前
从LeetCode 70. 爬楼梯看动态规划:如何精准推导状态转移方程?
c++·算法·leetcode·动态规划