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

滑动窗口学习

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] 更新窗口总和,移除左边元素,加入右边元素。

http://www.xdnf.cn/news/1130.html

相关文章:

  • 【HTTPS协议原理】数据加密、如何防止中间人攻击、证书和签名、HTTPS完整工作流程
  • UnityDots学习(四)
  • 关于RPC
  • 图数据库nebula测试指南
  • 在 NVIDIA Orin (JetPack 6.0) 上安装 PyTorch 2.4 + Torchvision 0.19
  • 每日算法-250422
  • 几种Word转换PDF的常用方法
  • 如何在idea里创建注释模版
  • 真我推出首款 AI 翻译耳机,支持 32 种语言翻译
  • 拥抱健康生活,开启养生之旅
  • Android Jetpack Compose基础实践
  • iscsi服务端安装及配置
  • 【Python爬虫基础篇】--3.cookie和session
  • Office文档图片批量提取工具
  • 异构网络环境下的切换策略研究
  • 边缘计算全透视:架构、应用与未来图景
  • 基于Java+MySQL实现(Web)企业仓库存储管理系统
  • 金融数据分析(Python)个人学习笔记(12):网络爬虫
  • 【产品经理从0到1】用户研究和需求分析
  • 从项目真实场景中理解二分算法的细节(附图解和模板)
  • nodejs使用require导入npm包,开发依赖和生产依赖 ,全局安装
  • 【HTML】【Web开发】滑动条挑战
  • 使用 Spring Boot Admin 通过图形界面查看应用配置信息的完整配置详解,包含代码示例和注释,最后以表格总结关键配置
  • Embedding与向量数据库__0422
  • 实验一-密码学数学基础
  • ​SYSTEM WAKE-UP(系统唤醒)​和外部中断唤醒(EXTI唤醒)
  • 建筑末端配电回路用电安全解决方案
  • 【数据结构 · 初阶】- 堆的实现
  • 抱佛脚之学SSM四
  • Redis—为何持久化使用子进程