当前位置: 首页 > news >正文

滑动窗口学习

2090. 半径为 k 的子数组平均值

题目

在这里插入图片描述

问题分析

给定一个数组 nums 和一个整数 k,需要构建一个新的数组 avgs,其中 avgs[i] 表示以 nums[i] 为中心且半径为 k 的子数组的平均值。如果在 i 前或后不足 k 个元素,则 avgs[i] 的值为 -1。

思路

初始化结果数组:创建一个长度与 nums 相同的数组 avgs,初始值全部设为 -1。
滑动窗口计算平均值:
对于每个索引 i,检查其前后是否各有至少 k 个元素。
如果满足条件,计算该窗口内的元素总和并求平均值(使用整数除法)。
将计算得到的平均值存入 avgs[i]。

代码

class Solution:def getAverages(self, nums: List[int], k: int) -> List[int]:n = len(nums)avgs = [-1] * n  # 初始化结果数组if k == 0:return nums  # k 为 0 时,每个元素的平均值就是其本身if 2 * k + 1 > n:return avgs  # 窗口大小大于数组长度,所有位置的平均值为 -1# 计算初始窗口的总和window_sum = sum(nums[:2 * k + 1])for i in range(k, n - k):avgs[i] = window_sum // (2 * k + 1)  # 计算当前窗口的平均值# 更新窗口总和,移除左边元素,加入右边元素if i + k + 1 < n:window_sum += nums[i + k + 1] - nums[i - k]return avgs

复杂度分析

时间复杂度:O(n)
空间复杂度:O(n)

学习

初始化:avgs = [-1] * n 创建一个全为 -1 的结果数组。
特殊情况处理:
if k == 0: 直接返回 nums,因为每个元素的平均值就是其本身。
if 2 * k + 1 > n: 返回全为 -1 的数组,因为窗口大小超过了数组长度。
滑动窗口:
window_sum = sum(nums[:2k+1]) 计算初始窗口(从 0 到 2k)的总和。
for i in range(k, n - k): 遍历每个有效中心位置 i。
avgs[i] = window_sum // (2 * k + 1) 计算当前窗口的平均值。
window_sum += nums[i + k + 1] - nums[i - k] 更新窗口总和,移除左边元素,加入右边元素。

相关文章:

  • 【Linux网络】各版本TCP服务器构建 - 从理解到实现
  • 基于Python+Pytest实现自动化测试(全栈实战指南)
  • 从单点突破到链式攻击:XSS 的渗透全路径解析
  • Linux-信号
  • 【产品经理从0到1】用户研究和需求分析
  • Python 设计模式:桥接模式
  • 23种设计模式-结构型模式之桥接模式(Java版本)
  • LangChain4j 搭配 Kotlin:以协程、流式交互赋能语言模型开发
  • 联易融助力乡村振兴,仙湖茶产业焕新机
  • 智能指针之设计模式4
  • 网络安全·第五天·TCP协议安全分析
  • leetcode0207. 课程表-medium
  • WordPress 只能访问html文件,不能访问php
  • (最新)华为 2026 届校招实习-硬件技术工程师-硬件通用/单板开发—机试题—(共14套)(每套四十题)
  • flutter 插件收集
  • 联易融出席深圳链主企业供应链金融座谈会,加速对接票交所系统
  • AI 模型在前端应用中的典型使用场景和限制
  • Activity使用优化
  • Elasticsearch性能优化实践
  • Nacos 2.0.2 在 CentOS 7 上开启权限认证(含 Docker Compose 配置与接口示例)
  • 深一度|王励勤二次创业从未停步,带领中国乒乓直面挑战
  • 对话地铁读书人|企业公关吴丑丑:阅读中相遇又重逢
  • 委托第三方可一次性补缴十多万元的多年社保?广州多人涉嫌被骗后报警
  • 蔚来第三品牌萤火虫上市:对标宝马MINI,预期贡献10%销量
  • 针对“二选一”,美团再次辟谣
  • 世界史圆桌|16-18世纪的跨太平洋贸易