專題二_滑動窗口_長度最小的子數組

引入:滑動窗口

首先,這是滑動窗口的第一道題,所以簡短的說一下滑動窗口的思路:

當我們題目要求找一個滿足要求的區間的時候,且這個區間的left和right指針,都只需要同向移動的時候,就可以使用滑動窗口,這個區間可以變長,變短,但是雙指針一定是同向移動即可!

所以滑動窗口的題目一般分別以下3步:

  1. 窗口定義:用?left?和?right?指針表示當前窗口的左右邊界。

  2. 移動規則

    • 進窗口right++):當滿足條件時,擴大窗口以包含新元素。

    • 出窗口left++):當不滿足條件時,收縮窗口以排除左側元素。

    • 由1,2可知,left和right都是同向移動(一般是向右)

  3. 統計結果:在移動過程中,根據題目要求記錄最優解(如最長/最短子數組)。

注:有時候是出窗口后再判斷更新,有時候是進窗口就可以更新,視題目而定!

一:題目

解釋:找一個最短的連續子數組的和 >=taget

二:算法

①:暴力

暴力解法的時間復雜度:N^3?

a:枚舉所有可能的子數組:一個長度為 n 的數組有 O(n^2) 個子數組(起點有 n 種選擇,終點有 n 種選擇,但實際是 n(n+1)/2,即 O(n^2))。
b:計算每個子數組的和:對于每個子數組,需要遍歷其所有元素求和。最壞情況下(子數組長度為 n),求和的時間復雜度是 O(n)。
c:所以:總時間復雜度為 O(n) × O(n) × O(n) = O(n^3)。

暴力能優化的點:

講暴力就是因為要對其進行優化,而優化過后就會發現其能用滑動窗口的思想來解決!

數組:[2,3,1,2,4,3]

當left 為2 right為2的時候 此時子數組和為8,如果按照暴力,此時我們的left會往走一個,然后right再回到left的位置向后繼續遍歷

優化1:但是其實我們right不用再動,只用left++即可,此時若是仍滿足要求,則更新長度即可,反之不滿足,則right++即可!


優化2:當left為更新為3的時候 此時我們right是指向2的 此時right可以不先回退! 先更新得知和為6,若此時的和仍大于等于t(7) 則更新區間長度,然后left直接再++ !; 反之小于t則right++

所以,綜上所述,次此題是一個雙指針同向移動的題目,所以用滑動窗口來解決!

②:滑動窗口

采取和滑動窗口之后,我們的雙指針最多只用遍歷數組一遍,所以時間復雜度為O(N)

三:代碼

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int left = 0,right=0,len = INT_MAX,sum=0;for(;right<nums.size();right++){sum+=nums[right];//窗口總值++while(sum>=target)//窗口符合要求{len=min(len,(right-left+1));//取區間最小值去更新lensum-=nums[left];//出窗口 減去left的值 left++;//left++}}return (len==INT_MAX?0:len);//為INT_MAX代表此題無解,則返回0}
};

易錯點:

①:當窗口滿足要求的時候,一定是while循環,然后出一次窗口,判斷一次是否窗口還符合要求,符合則繼續出窗口,直到窗口不符合要求

②:更新結果,不是窗口滿足要求就更新到len,而是把當前次滿足要求的結果和之前的len取較小值去更新

③:len一開始直接給個最大值,因為我們求得是區間的最小值。滑動窗口的題目,讓你求最小你就給INT_MAX,讓你求最大值,你初識為0,準沒錯!

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

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

相關文章

解鎖高效開發:AWS 前端 Web 與移動應用解決方案詳解

告別繁雜的部署與運維&#xff0c;AWS 讓前端開發者的精力真正聚焦于創造卓越用戶體驗。在當今快速迭代的數字環境中&#xff0c;Web 與移動應用已成為企業與用戶交互的核心。然而&#xff0c;前端開發者常常面臨諸多挑戰&#xff1a;用戶認證的復雜性、后端 API 的集成難題、跨…

北京JAVA基礎面試30天打卡04

1. 單例模式的實現方式及線程安全 單例模式&#xff08;Singleton Pattern&#xff09;確保一個類只有一個實例&#xff0c;并提供一個全局訪問點。以下是常見的單例模式實現方式&#xff0c;以及如何保證線程安全&#xff1a; 單例模式的實現方式餓漢式&#xff08;Eager Init…

Redis 緩存三大核心問題:穿透、擊穿與雪崩的深度解析

引言在現代互聯網架構中&#xff0c;緩存是提升系統性能、降低數據庫壓力的核心手段之一。而 Redis 作為高性能的內存數據庫&#xff0c;憑借其豐富的數據結構、靈活的配置選項以及高效的網絡模型&#xff0c;已經成為緩存領域的首選工具。本文將從 Redis 的基本原理出發&#…

耘瞳科技國產化點云處理軟件,開啟智能化三維測量新時代

在現代工業制造領域&#xff0c;三維點云數據已成為推動生產效率提升、質量控制優化以及智能制造轉型的關鍵技術之一。三維點云數據能夠提供高精度的物體表面信息&#xff0c;廣泛應用于制造零件的質量檢測&#xff1b;通過點云數據與CAD模型的對比分析&#xff0c;可以快速檢測…

RabbitMQ面試精講 Day 8:死信隊列與延遲隊列實現

【RabbitMQ面試精講 Day 8】死信隊列與延遲隊列實現 文章標簽 RabbitMQ,消息隊列,死信隊列,延遲隊列,面試技巧,分布式系統 文章簡述 本文是"RabbitMQ面試精講"系列第8天&#xff0c;深入講解死信隊列與延遲隊列的實現原理與實戰應用。文章詳細解析死信隊列的觸發…

團結引擎 1.5.0 版本發布:Android App View 功能詳解

核心亮點 原生安卓應用支持 2D & 3D 雙形態呈現 編輯器全流程集成 靈活調控功能 多應用并行展示 智能座艙應用示例 快速入門指南 開發說明 功能支持 實驗性功能 資源鏈接 團結引擎 1.5.0 版本已于 4 月 14 日正式上線。本次更新中&#xff0c;車機版引入了一項突…

基于SpringBoot的OA辦公系統的設計與實現

文章目錄前言詳細視頻演示具體實現截圖后端框架SpringBoot持久層框架MyBaits成功系統案例&#xff1a;代碼參考數據庫源碼獲取前言 博主介紹:CSDN特邀作者、985高校計算機專業畢業、現任某互聯網大廠高級全棧開發工程師、Gitee/掘金/華為云/阿里云/GitHub等平臺持續輸出高質量…

知識隨記-----用 Qt 打造優雅的密碼輸入框:添加右側眼睛圖標切換顯示

Qt 技巧&#xff1a;通過 QLineEdit 右側眼睛圖標實現密碼可見性切換 文章目錄Qt 技巧&#xff1a;通過 QLineEdit 右側眼睛圖標實現密碼可見性切換概要整體架構流程技術名詞解釋技術細節實現效果展示概要 本文介紹如何使用 Qt 框架為 QLineEdit 控件添加一個右側的眼睛圖標&a…

Unity里的對象旋轉數值跳轉問題的原理與解決方案

文章目錄1. 問題描述2. 問題原因3. 解決方案3.1通過多個父子關系從而控制旋轉&#xff08;推薦&#xff09;3.2 使用四元數進行旋轉1. 問題描述 我們現在寫一個3D的Unity程序&#xff0c;我們現在設置了一個物體后&#xff0c;我們想旋轉使其改為我們想要的情況。但是我們如果…

為什么現代 C++ (C++11 及以后) 推薦使用 constexpr和模板 (Templates) 作為宏 (#define) 的替代品??

我們用現實世界的比喻來深入理解??為什么 C 中的宏 (#define) 要謹慎使用&#xff0c;以及為什么現代 C (C11 及以后) 推薦使用 constexpr 和模板 (Templates) 作為替代品。??&#x1f9e9; ??核心問題&#xff1a;宏 (#define) 是文本替換??想象宏是一個 ??“無腦的…

PyCharm vs. VSCode 到底哪個更好用

在 Python 開發者中&#xff0c;關于 PyCharm 和 VSCode 的討論從未停止。一個是功能齊備的集成開發環境&#xff08;IDE&#xff09;&#xff0c;另一個是輕快靈活的代碼編輯器。它們代表了兩種不同的開發哲學&#xff0c;選擇哪個&#xff0c;往往取決于你的項目需求、個人習…

FPGA學習筆記——VGA彩條顯示

目錄 一、任務 二、分析 三、代碼 四、實驗現象 五、更新 一、任務 使用VGA實現彩條顯示&#xff0c;模式是640x48060。 二、分析 首先&#xff0c;模式是640x48060&#xff0c;那么對照以下圖標&#xff0c;知道其它信息&#xff0c;不清楚時序和VGA掃描方式的可以看看這…

ES-301A :讓 Modbus 設備無縫接入工業以太網的高效橋梁

在工業自動化領域&#xff0c;串口設備與以太網的互聯互通是提升系統效率的關鍵。ES-301A 工業以太網串口網關作為上海泗博自動化精心打造的專業解決方案&#xff0c;以強大的協議轉換能力、工業級可靠性和靈活配置特性&#xff0c;成為連接 Modbus RTU/ASCII 設備與 Modbus TC…

【學習筆記】FTP庫函數學習

【學習筆記】FTP庫函數學習 FTP基本指令步驟 1、初始化會話句柄&#xff1a;CURL *curl curl_easy_init(); 2、設置會話選項&#xff1a; 設置服務器地址&#xff0c;設置登錄用戶和密碼 curl_easy_setopt(curl, CURLOPT_URL, ftp_server); curl_easy_setopt(curl, CURLOPT_US…

ARM Cortex-M異常處理高級特性詳解

1. 異常處理概述 ARM Cortex-M處理器提供了高效的異常處理機制&#xff0c;包含多種硬件優化特性&#xff0c;顯著提升了中斷響應性能和系統效率。這些特性對于實時嵌入式系統和網絡協議棧&#xff08;如LwIP&#xff09;的性能至關重要。 1.1 Cortex-M異常處理架構 Cortex-M異…

【圖像算法 - 08】基于 YOLO11 的抽煙檢測系統(包含環境搭建 + 數據集處理 + 模型訓練 + 效果對比 + 調參技巧)

一、項目背景與需求 【打怪升級 - 08】基于 YOLO11 的抽煙檢測系統&#xff08;包含環境搭建 數據集處理 模型訓練 效果對比 調參技巧&#xff09;今天我們使用YOLO11來訓練一個抽煙檢測系統&#xff0c;基于YOLO11的抽煙檢測系統。我們使用了大概兩萬張圖片的數據集訓練了…

vue2升級vue3中v-model的寫法改造

vue2選項式 <template><div><el-rowclass"group-title":title"$t(restore_default_parameters)">{{ $t(restore_default_parameters) }}</el-row><el-form-item :label"$t(restore_default_parameters)" class"…

5G-LEO 簡介

1. 什么是 5G-LEO 5G-LEO 指的是將 5G 新空口&#xff08;5G NR&#xff09;服務擴展到低軌衛星&#xff08;LEO&#xff09;上的非地面網絡&#xff08;NTN, Non-Terrestrial Network&#xff09;方案。通過在距地面約500–2 000 km 的低軌道衛星上部署通信載荷&#xff0c;5G…

【MCAL】AUTOSAR架構下SPI數據同步收發具體實現

目錄 前言 正文 1.依賴的SPI硬件特性 1.1. SPI時隙參數配置 1.2. SPI數據發送和接收模式 2.MCAL中的SPI配置 3.軟件的具體實現 3.1. Spi_SyncTransmit 3.2. Spi_lSyncTransmit 3.3. Spi_lSyncStartJob 3.4. Spi_lSyncTransmitData8Bit 3.5. Spi_lSynTransErrCheck …

SQL157 更新記錄(一)

描述現有一張試卷信息表examination_info&#xff0c;表結構如下圖所示&#xff1a;FiledTypeNullKeyExtraDefaultCommentidint(11)NOPRIauto_increment(NULL)自增IDexam_idint(11)NOUNI(NULL)試卷IDtagchar(32)YES(NULL)類別標簽difficultychar(8)YES(NULL)難度durationint(11…