算法----滑動窗口

滑動窗口

什么是滑動窗口

滑動窗口是一種常用的技術,主要用于處理連續數據序列(如數組、字符串或時間序列數據),通過動態調整一個固定大小的“窗口”來高效地解決問題。窗口在序列上“滑動”,每次移動一個位置,從而避免重復計算,優化時間和空間復雜度。該技術在算法設計、網絡通信、數據分析等領域有廣泛應用。

示例

我們通過一道題來學習滑動窗口
題目
首先我們閱讀題目,思考三個部分內容

  • 已知條件
  • 求什么
  • 關鍵字
    已知條件為n個元素大小的數組,和一個整數k
    求平均數
    關鍵字: 平均數最大,長度為k,連續子數組
    這里,長度為k就是窗口大小為k,我們以第一個例子[1,12,-5,-6,50,3] k = 4為例子

步驟

  • 確定窗口大小
  • 確定窗口的起點,終點
  • 確定元素進入,離開窗口時的狀態
  • 更新窗口的狀態
  • 得到答案
    這道題中大小為k,起點為0,終點為數組大小,元素進入和離開窗口時都是不變的,那么這里最關鍵的一步就是怎么更新窗口的狀態我們來詳細講解
  • 看我們需要什么
  • 在窗口中能得到什么
  • 什么時候更新窗口的元素
  • 怎么更新窗口的元素
    由題意不難得知我們需要窗口中元素的和(k固定,得到和就得到平均數)
    我們能在窗口中得到每個元素的值
    當我們計算完和之后就可以更新窗口的值
    由題意由于是定長k,并且求k這個窗口中sum的最大值,我們不難發現只需要每次讓窗口向前移動一位就行
    那么這道題的思考就完成了,下面看圖解
    圖解
    這里0 - 4是第一個窗口,我們可以得到0 - 4這個窗口的和為2,平均值為0.5
    這時我們移動窗口,讓窗口到1 - 5這時和為51,以此類推,到了最后到達2,6后此時窗口的尾指針到達數組邊界,此時滑動窗口結束

代碼

 pub fn find_max_average(nums: Vec<i32>, k: i32) -> f64 {//計算第一次平均值let avg_and_sum = Self::average(&nums, 0, k);let mut avg = avg_and_sum.0;let mut sum = avg_and_sum.1;let mut res = avg;for i in 1..nums.len() {if i + k as usize > nums.len() {break;}sum -= nums[i - 1];sum += nums[i + k  as usize -1];avg = sum as f64 / k as f64;if res < avg {res = avg;}}res}fn average(nums: &Vec<i32>, start: i32, end: i32) -> (f64, i32) {let mut sum = 0.0;for i in start..end {sum += nums[i as usize] as f64;}(sum / (end - start) as f64, sum as i32)}

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

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

相關文章

Rust學習筆記(三)|所有權機制 Ownership

本篇文章包含的內容1 重新從堆和棧開始考慮2 所有權規則3 變量和數據&#xff08;值&#xff09;的交互方式3.1 移動 Move3.2 克隆 Clone3.3 復制 Copy4 函數與所有權4.1 參數傳遞時的所有權轉移4.2 函數返回時的所有權轉移5 引用和借用6 切片前面兩篇僅僅介紹了一些Rust的語法…

Redis 知識點與應用場景

1. Redis 簡介與核心特性Redis&#xff08;Remote Dictionary Server&#xff09;是一款開源的內存數據存儲系統&#xff0c;支持多種數據結構&#xff0c;兼具高性能、持久化、分布式等特性&#xff0c;廣泛用于緩存、數據庫、消息中間件等場景。其核心特性包括&#xff1a;高…

日常反思總結

1.group by和order by的區別

易貝 (eBay (eBay) 關鍵字搜索 API 實戰:從認證到商品列表獲取全流程解析

在跨境電商開發領域&#xff0c;eBay 作為全球最大的在線交易平臺之一&#xff0c;其開放 API 為開發者提供了豐富的商品數據獲取能力。本文將聚焦 eBay 關鍵字搜索商品列表接口的實現&#xff0c;涵蓋 OAuth2.0 認證、高級搜索參數配置、分頁策略及完整代碼實現&#xff0c;幫…

敏捷數據開發實踐:基于 Amazon Q Developer + Remote MCP 構建本地與云端 Amazon Redshift 交互體系

敏捷數據開發實踐&#xff1a;基于 Amazon Q Developer Remote MCP 構建本地與云端 Amazon Redshift 交互體系 新用戶可獲得高達 200 美元的服務抵扣金 亞馬遜云科技新用戶可以免費使用亞馬遜云科技免費套餐&#xff08;Amazon Free Tier&#xff09;。注冊即可獲得 100 美元的…

【SpringBoot】11 概念理解 - 深入理解 Java 和 Spring 中的容器、組件、類、對象與 Bean

文章目錄引言1. 基本概念解析1.1 類&#xff08;Class&#xff09;1.2 對象&#xff08;Object&#xff09;1.3 組件&#xff08;Component&#xff09;1.4 Bean 實例&#xff08;Bean Instance&#xff09;1.5 容器&#xff08;Container&#xff09;2. 運行時 vs. 非運行時的…

【學習嵌入式day-25-線程】

exec函數族exec函數族利用進程空間執行另一份代碼#include "../head.h"int main(void) {char *parg[5] {"./hello","how","are","you",NULL,};printf("execl-up\n");//execl("./hello", "./hello…

Rust 中 Box 的深度解析:作用、原理與最佳實踐

Rust 中 Box 的深度解析&#xff1a;作用、原理與最佳實踐 Box 是 Rust 中最基礎且最重要的智能指針類型&#xff0c;它在 Rust 的內存管理和所有權系統中扮演著核心角色。以下是關于 Box 的全面解析&#xff1a; Box 的核心作用 #mermaid-svg-m6liFZlmqOHRfIZB {font-family:&…

【測試用例】

需求背景部分金融/政企等行業客戶&#xff0c;企業內部安全要求較高&#xff0c;且因為某些原因未接入 sso 登錄&#xff0c;會要求 MG 提供較為復雜的密碼規則甚至提供強更機制&#xff1b;且每個客戶的安全要求不一樣目前 MG 線上密碼規則&#xff1a; 8 位以上&#xff0c;包…

Klipper-probe模塊

配置信息[probe] pin: !PD4 x_offset: 0 y_offset: 0 z_offset: -0.20 #the distance between nozzle and level switch speed: 10 samples: 2 #probe one point three times get an average samples_result: average sample_retract_dist: 5 samples_tolerance: 0.05 # …

Excel多級數據結構導入導出工具

Excel多級數據結構導入導出工具 這是一個功能強大的Excel導入導出工具庫&#xff0c;專門用于處理復雜的多級嵌套數據結構。通過自定義注解配置&#xff0c;可以輕松實現Java對象與Excel文件之間的雙向轉換。 核心功能特性 1. 多級數據結構支持 嵌套對象處理: 支持任意層級的對…

基于UniApp的新大陸物聯網平臺溫濕度檢測系統開發方案

新大陸物聯網平臺對接要點 認證方式&#xff1a; 使用AccessToken進行API認證 Token存儲在本地緩存中 數據格式&#xff1a; 溫度數據單位&#xff1a;攝氏度(C) 濕度數據單位&#xff1a;百分比(%) 時間格式&#xff1a;ISO 8601或時間戳 設備狀態&#xff1a; online:…

Git、JSON、MQTT

GIT簡介&#xff1a;Git是什么&#xff1f;Git是目前世界上最先進的分布式版本控制系統作用&#xff1a;版本控制&#xff08;版本的備份--->版本的回溯和前進&#xff09;多人協作優勢&#xff1a;SVN(集中式)劣勢&#xff1a;過度依賴服務器和網絡&#xff0c;容災性差Git…

yolo目標檢測技術之yolov11項目實戰(三)

yolo目標檢測技術之yolov11項目實戰&#xff08;三&#xff09; 文章目錄yolo目標檢測技術之yolov11項目實戰&#xff08;三&#xff09;一、 基于 YOLO11 的火焰與煙霧檢測系統&#xff08;實戰代碼&#xff09;項目目標環境搭建創建虛擬環境安裝依賴1.1 數據集準備1. 下載地址…

CF思維小訓練(二)

清晰的繽紛的都可以 臟兮兮的甜的也都有轉機 不想太小心 錯過第一百零一場美麗 CF思維小訓練&#xff08;二&#xff09; 書接上回CF思維小訓練-CSDN博客 雖然代碼很短&#xff0c;都是每一道題的背后都思維滿滿&#xff1b; 目錄CF思維小訓練&#xff08;二&#xff09;Arbo…

分布式鎖:從理論到實戰的深度指南

1. 分布式鎖是啥&#xff1f;為什么它比單機鎖更“硬核”&#xff1f;分布式鎖&#xff0c;聽起來高大上&#xff0c;其實核心問題很簡單&#xff1a;在多個機器、進程或服務同時搶奪資源時&#xff0c;怎么保證不打架&#xff1f; 想象一下&#xff0c;你在雙十一搶購限量款球…

基于UniApp的智能在線客服系統前端設計與實現

了解更多&#xff0c;搜索“程序員老狼”一、引言在當今數字化時代&#xff0c;客戶服務已成為企業競爭力的重要組成部分。本文將詳細介紹一款基于UniApp框架開發的跨平臺智能客服系統前端實現方案&#xff0c;該系統不僅具備傳統客服功能&#xff0c;還融入了現代即時通訊和人…

react與vue的對比,來實現標簽內部類似v-for循環,v-if等功能

前言&#xff1a;在vue中我們提供了很多標簽方法&#xff0c;比如用的比較多的v-for循環內容&#xff0c;v-if/v-show等判斷&#xff0c;可以直接寫在標簽中&#xff0c;大大提高了我們的開發效率&#xff0c;那么在react中有沒有類似的方法呢&#xff1f;我們這里來說一說。re…

PCB工藝-四層板制作流程(簡單了解下)

一&#xff09;流程&#xff1a;四層板的內層芯板&#xff0c;是由一張雙面覆銅板PP*2銅箔*2覆銅板蝕刻好線路&#xff0c;就是我們的芯板了PP全名叫半固化片&#xff0c;主體是玻璃纖維布環氧樹脂&#xff0c;是絕緣介質銅箔片&#xff0c;是單獨一張銅箔&#xff0c;很薄&…

無人機三維路徑規劃

文章目錄 1、引言 2、背景知識 3、核心算法 4、挑戰與優化 5、初始效果 6、需要改進地方 7、水平方向優化路線 8、垂直方向優化路線 9、與經過路線相交的網格都繪制出來 1、引言 介紹三維路徑規劃的定義和重要性:在無人機、機器人導航、虛擬現實等領域的應用。 概述文章目標和…