LeetCode 2090. 半徑為 k 的子數組平均值

題目鏈接

2090. 半徑為 k 的子數組平均值

題目描述

給定一個下標從 0 開始的整數數組 nums 和整數 k,構建并返回一個長度為 n 的數組 avgs,其中 avgs[i] 表示以下標 i 為中心、半徑為 k 的子數組的平均值。具體規則如下:

  • 無效位置:若 i 左側不足 k 個元素(i - k < 0)或右側不足 k 個元素(i + k >= n),則 avgs[i] = -1
  • 有效位置:若 i 前后均有至少 k 個元素(即子數組下標范圍為 [i-k, i+k],共 2k+1 個元素),則 avgs[i] 為該子數組元素的平均值(使用截斷式整數除法,直接舍去小數部分)。

解法分析

代碼實現

from typing import List  class Solution:  def getAverages(self, nums: List[int], k: int) -> List[int]:  s = 0  # 滑動窗口內元素的和  ans = [-1] * len(nums)  # 初始化結果數組,默認所有位置無效  for i in range(len(nums)):  s += nums[i]  # 將當前元素加入窗口和  if i < k * 2:  continue  # 窗口未形成完整長度時跳過計算  ans[i - k] = s // (2 * k + 1)  # 計算中心位置的平均值  s -= nums[i - 2 * k]  # 滑動窗口,移除左邊界元素  return ans  

代碼詳細分析

1. 初始化操作
  • s(窗口和):用于存儲當前滑動窗口內所有元素的和,初始化為 0。隨著遍歷進行,逐個累加數組元素,并在窗口滑動時減去離開窗口的元素,保持動態更新。
  • ans(結果數組):初始化為全 -1,表示所有位置默認無效。后續有效位置會被覆蓋為對應的平均值,無需額外處理無效位置的邊界條件。
2. 遍歷數組與窗口擴展
  • 右指針 i:從 0 開始遍歷數組的每個元素,每次將 nums[i] 加入窗口和 s,相當于將窗口的右邊界擴展到當前元素 i
  • 窗口形成條件:當 i < 2k 時,窗口內元素個數為 i+1,而有效窗口需要 2k+1 個元素(例如 k=1 時需要3個元素,i=1 時只有2個),此時跳過計算,繼續擴展窗口。
3. 有效窗口處理
  • 窗口完整時:當 i >= 2k 時,窗口包含從 i-2ki2k+1 個元素(例如 k=3i=6 時,窗口范圍是 [0,6],共7個元素),此時窗口以 i-k 為中心(左邊界 i-2k 右移 k 步到達中心)。
  • 平均值計算:使用截斷式整數除法 s // (2k+1),直接舍去小數部分,符合題目要求。
4. 窗口滑動更新
  • 移除左邊界元素:在計算完當前中心位置的平均值后,下一個窗口的左邊界需要右移一位,即移除 nums[i-2k](當前窗口的最左元素),確保下一次遍歷的窗口大小仍為 2k+1。例如,當 i=6 處理完后,下一個窗口左邊界從 0 變為 1,窗口范圍變為 [1,7]

案例分析

以 LeetCode 示例輸入為例:
輸入nums = [7,4,3,9,1,8,5,2,6], k = 3
輸出[-1,-1,-1,5,4,4,-1,-1,-1]

分步計算過程

  1. 窗口大小2k+1 = 7,有效中心位置需滿足 i-3 >= 0i+3 < 9,即 i ∈ [3, 5](對應結果數組下標3、4、5)。

  2. 遍歷過程

    • i=6(下標6,元素5)
      • 窗口和 s = 7+4+3+9+1+8+5 = 37
      • i >= 2k=6,中心位置為 6-3=3ans[3] = 37 // 7 = 5
      • 移除左邊界元素 nums[0]=7s = 37-7=30
    • i=7(下標7,元素2)
      • 加入當前元素2,s = 30+2=32
      • 中心位置為 7-3=4ans[4] = 32 // 7 = 4
      • 移除左邊界元素 nums[1]=4s = 32-4=28
    • i=8(下標8,元素6)
      • 加入當前元素6,s = 28+6=34
      • 中心位置為 8-3=5ans[5] = 34 // 7 = 4
      • 移除左邊界元素 nums[2]=3,但遍歷結束,無需繼續處理。
  3. 結果數組

    • 無效位置(如 i=0,1,2,6,7,8 因邊界不足)保持初始值 -1,有效位置 3、4、5 分別賦值為 5、4、4,最終結果與示例一致。

總結

方法優勢

  • 線性時間復雜度O(n),每個元素僅被訪問一次,窗口滑動和計算平均值均為常數時間操作,避免了暴力解法中每次計算子數組和的 O(k) 復雜度。
  • 簡潔的邊界處理:通過初始化結果數組為 -1,自動處理所有無效位置,無需額外判斷 i-k < 0i+k >= n,代碼邏輯清晰。
  • 空間高效:除結果數組外,僅使用常數級額外空間(s 和循環變量),適用于處理大規模數據(如 n=10^5)。

關鍵細節

  • 窗口長度:固定為 2k+1,確保覆蓋中心 i 左右各 k 個元素。
  • 整數除法:使用 // 運算符實現截斷式除法,直接舍去小數部分,符合題目要求(例如 37//7=5,而非四舍五入)。
  • 滑動窗口邏輯:每次右邊界擴展后,僅當窗口完整時(i >= 2k)才計算中心位置,避免無效計算。

適用場景

該解法適用于所有「固定長度子數組求均值/和」的問題,例如:

  • 求每個長度為 m 的子數組的和;
  • 求滑動窗口內元素的平均值或其他統計量(需調整窗口大小和計算邏輯)。

通過滑動窗口技術,可高效解決此類問題,是處理定長子數組問題的經典模板之一。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87278.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87278.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87278.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入理解C++11原子操作:從內存模型到無鎖編程

文章目錄 C并發編程的新紀元內存模型基礎&#xff1a;可見性與有序性數據競爭的根源happens-before關系memory_order枚舉詳解1. memory_order_relaxed2. memory_order_acquire/memory_order_release3. memory_order_seq_cst 原子操作詳解std::atomic模板核心原子操作1. 讀取與存…

DQL-1-基礎查詢

基礎查詢 DQL-1-基礎查詢 基礎查詢DQL - 介紹DQL - 語法DQL - 基本查詢案例 DQL - 介紹 SQL 英文全稱是 Data Query Language, 數據查詢語言, 用來查詢數據庫中表的記錄 查詢關鍵字: SELECT DQL - 語法 SELECT 字段列表FROM 表名列表WHERE條件列表GROUP BY分組字段列表HAVI…

Prompt 精通之路(七)- 你的終極 AI 寶典:Prompt 精通之路系列匯總

你的終極 AI 寶典&#xff1a;Prompt 精通之路系列匯總 標簽&#xff1a; #Prompt指南 #AI學習資源 #速查手冊 #ChatGPT #系列總結 &#x1f680; Prompt 精通之路&#xff1a;系列文章導航 第一篇&#xff1a;AI 時代的新語言&#xff1a;到底什么是 Prompt&#xff1f;為什么…

P27:RNN實現阿爾茨海默病診斷

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 一、過程解讀 PyTorch 實戰&#xff1a;阿爾茨海默病數據預測模型 今天&#xff0c;我將帶大家一起探索一個基于 PyTorch 的深度學習小項目——利用 RNN 模…

HakcMyVM-Arroutada

信息搜集 主機發現 ┌──(kali?kali)-[~] └─$ nmap -sn 192.168.21.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-07-01 07:13 EDT Nmap scan report for 192.168.21.11 Host is up (0.00062s latency). MAC Address: 08:00:27:4E:CC:FB (PCS Systemtechnik/Or…

TEXT Submitting Solutions

前言 USACO 訓練項目配備了一個自動評分系統&#xff0c;用于批改你的作業題目。你可以直接在題目頁面提交你的程序&#xff1b;系統會對程序進行編譯和評分&#xff0c;幾秒鐘內就能將結果反饋給你。 支持的語言有 C、C&#xff08;含 C11 和 C14&#xff09;、PASCAL、Pyth…

Reactor 瞬態錯誤

在響應式編程中&#xff0c;retryWhen 操作符通過 RetrySignal 接口提供了對重試行為的精細控制&#xff0c;特別是在處理 瞬態錯誤&#xff08;transient errors&#xff09; 時。瞬態錯誤是指那些在一段時間內發生&#xff0c;但隨后會自行恢復的錯誤&#xff0c;例如網絡請求…

基于 SpringBoot+Vue.js+ElementUI 的小型超市商品管理系統設計與實現7000字論文設計

摘要 本論文設計并實現了一個基于 SpringBoot、Vue.js 和 ElementUI 的小型超市商品管理系統。該系統旨在為小型超市提供一個高效、便捷的商品管理解決方案&#xff0c;實現商品信息的錄入、查詢、修改、刪除等功能&#xff0c;同時支持庫存管理、銷售統計等業務需求。論文首先…

Kerberos 認證協議解析

文章目錄 概述核心概念認證流程階段一&#xff1a;Client -> AS&#xff0c;獲取 TGT階段二&#xff1a;Client -> TGS&#xff0c;獲取服務票據階段三&#xff1a;Client -> Server&#xff0c;請求服務 核心安全機制優缺點分析優勢局限性 實踐與排錯關鍵配置 (krb5.…

【設計模式07】適配器

前言 實現目標&#xff0c;組合源&#xff0c;寫個適配方法&#xff0c;適用于沒辦法改變源&#xff0c;但又想實現目標類。我暫時還沒使用到過&#xff0c;但感覺用處還是蠻大的 UML類圖 代碼示例 package com.sw.learn.pattern.C_structre.a_adapter;public class Main {//…

SPI、I2C和UART三種串行通信協議的--------簡單總結

目錄 一、3種協議的對比二、典型應用場景三、選型建議 以下是SPI、I2C和UART三種串行通信協議的對比分析及適用場景總結&#xff1a; 一、3種協議的對比 . 對比其他接口 特性ICSPIUART信號線數量2&#xff08;SCL SDA&#xff09;4&#xff08;SCK MOSI MISO SS/CS&…

VUE admin-element 后臺管理系統三級菜單實現緩存

VUE admin-element 后臺管理系統三級菜單實現緩存 框架無法直接實現三級菜單頁面緩存&#xff0c;原因是由于直接緩存時沒有把上級路由文件名稱緩存進去&#xff0c;所以在框架基礎上參考部分文章進行了一些改造 菜單文件&#xff0c;三級菜單引用文件路徑修改&#xff0c;在…

【筆記】Windows 安裝 Gemini CLI

2025 年 07 月 02 日 Windows 安裝 Gemini CLI google-gemini/gemini-cli&#xff1a;一個開源的 AI 代理&#xff0c;可將 Gemini 的強大功能直接引入您的終端。 一、前置條件 系統要求&#xff1a;Windows 7 及以上版本。 Node.js 環境&#xff1a;Gemini CLI 基于 Node.js …

transformers==4.42.0會有一個BUG

transformers4.42.0版本下&#xff0c;自動安裝模型時出現一個BUG&#xff08;自動從Hugging Faces上下載&#xff09;。 2025-07-02 14:07:08,641 - __main__ - ERROR - 模型加載失敗: Failed to import transformers.models.llama.tokenization_llama_fast because of the f…

Spring-解決IDEA中無法創建JDK17一下的SpringBoot項目

目錄 一.直接創建 二.修改Server URL為https://start.aliyun.com 一.直接創建 目前如果使用https://start.spring.io&#xff08;Spring官方源&#xff09;,已經沒有辦法直接創建JDK17一下的項目了&#xff1a; 如果想要創建JDK8的項目&#xff0c;可以先通…

人工智能-基礎篇-13-基礎應用篇-2~~模型項目開發流程--從0到1創建類似DeepSeek語言模型,應該怎么做?

1、前期準備 1、明確目標與需求分析 應用場景定義&#xff1a;首先需要明確你的模型將用于哪些場景&#xff0c;比如對話系統、文本生成、代碼輔助等。性能指標設定&#xff1a;確定關鍵性能指標(KPI)&#xff0c;如準確率、響應時間、支持的語言種類等。 2、組建團隊 機器…

本周滬鋁想法

核心邏輯&#xff1a;低庫存支撐與淡季需求疲軟博弈&#xff0c;宏觀情緒助推高位震蕩 一、成本下移 VS 價格韌性? 成本端與價格表現呈現出不同態勢。成本端方面&#xff0c;氧化鋁現貨價格在本周持續下跌&#xff0c;山東地區均價降至 3090 元 / 噸&#xff0c;環比下降 1.…

【網絡】SSL/TLS介紹

一、SSL/TLS 概述 SSL&#xff08;Secure Socket Layer&#xff09; &#xff1a; 最初由網景&#xff08;Netscape&#xff09;開發&#xff0c;用于在客戶端和服務器之間建立安全的加密連接&#xff0c;防止數據被竊取或篡改。后來逐步演進&#xff0c;最終被 TLS 取代。 TL…

TLF35584

13、SPI串行外設接口 13.1 介紹 主要功能 SPI 總線是?種以全雙工模式運行的同步串行數據鏈路。TLF35584 在從機模式下進行通信&#xff0c;其中主機(μC)啟動數據幀。TLF35584應該通過專用片選線進行尋址。這允許其他從設備連接到SPI總線。 數據傳輸 開始通信&#xff0c;μ…

word中如何保存高清圖片,并保存為高質量的pdf文件(圖像不失真)

word中如何保存高清圖片 打開word,選擇&#xff0c;選項&#xff0c;高級選項&#xff0c;選擇不壓縮文件中的圖像并保持分辨率高保真 將word保存為高質量的pdf文件 不用另存為或者導出 選擇文件&#xff0c;選擇打印&#xff1a; 選擇中間都打印出pdf即可。 然后再選擇打印…