[優選算法專題二滑動窗口——最大連續1的個數 III]

題目鏈接

最大連續1的個數 III

題目描述

題目解析

問題本質

  • 輸入:二進制數組nums(只包含 0 和 1)和整數k
  • 操作:最多可以將k個 0 翻轉成 1
  • 目標:找到翻轉后能得到的最長連續 1 的子數組長度

這個問題的核心是要找到一個區間,在允許翻轉最多k個 0 的情況下,這個區間內的 1(包括翻轉得到的 1)是最長的。

解題思路:滑動窗口法

滑動窗口(雙指針)是解決這類 "最長連續子數組" 問題的高效方法,基本思想是:

  1. 用兩個指針leftright維護一個區間(窗口)[left, right]
  2. 保證窗口內的 0 的數量不超過k(即可以通過翻轉使整個窗口都變為 1)
  3. 不斷擴大窗口(移動right),當窗口不滿足條件時縮小窗口(移動left
  4. 記錄過程中出現的最大窗口長度

算法流程:

1. ?初始化: left = 0 , right = 0 , ret = 0 ;

2. ?當 right ?于數組??的時候,?直下列循環:

? ? ?i:進窗口,1無視,0計數表++;

? ? ?ii:判斷計數表是否 >k;

? ? ? ? ? 是則讓左側元素滑出窗?,更新哈希表的值,直到 0 的個數恢復正常;

? ? ?iii:更新結果,right++;

3. ?循環結束后, ret 存的就是最終結果。

關鍵代碼邏輯解析

// 當窗口中0的數量超過k時,需要縮小窗口
while(zero > k) {if(nums[left++] == 0) zero--;
}

這段代碼是算法的核心,它確保了窗口的合法性:

  • 當 0 的數量超過 k 時,通過移動左指針縮小窗口
  • 只有當移除的元素是 0 時,才減少zero的計數
  • 循環結束后,窗口內 0 的數量一定≤k
ret = max(ret, right - left + 1);

這行代碼用于更新最長有效窗口的長度,每次移動右指針后都要檢查當前窗口是否是最長的。

完整代碼

算法優勢分析

  1. 時間效率

    • 每個元素最多被leftright各訪問一次
    • 總時間復雜度為 O (n),n 為數組長度
    • 相比暴力解法(嘗試所有可能的子數組)的 O (n2) 有顯著提升
  2. 空間效率

    • 只使用了常數個額外變量(leftrightzeroret等)
    • 空間復雜度為 O (1)

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

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

相關文章

C#單元測試(xUnit + Moq + coverlet.collector)

C#單元測試 xUnit Moq coverlet.collector 1.添加庫 MlyMathLib 2.編寫庫函數內容 using System;namespace MlyMathLib {public interface IUserRepo{string GetName(int id);}public class UserService{private readonly IUserRepo _repo;public UserService(IUserRepo repo…

【數據庫】Oracle學習筆記整理之五:ORACLE體系結構 - 參數文件與控制文件(Parameter Files Control Files)

Oracle體系結構 - 參數文件與控制文件(Parameter Files & Control Files) 參數文件與控制文件是Oracle數據庫的“雙核基石”:參數文件是實例的“啟動配置中心”,定義運行環境與規則;控制文件是數據庫的“物理元數據…

GDB典型開發場景深度解析

GDB典型開發場景深度解析 以下是開發過程中最常見的GDB使用場景,結合具體實例和調試技巧,幫助開發者高效解決實際問題:一、崩潰分析(Core Dump調試) 場景:程序突然崩潰,生成了core文件 # 啟動調…

存儲、硬盤、文件系統、 IO相關常識總結

目錄 (一)存儲 (1)定義 (2)分類 (二)硬盤 (1)容量(最主要的參數) (2)轉速 (3)訪…

docker安裝mongodb及java連接實戰

1.docker部署mongodb docker run --name mongodb -d -p 27017:27017 -v /data/mongodbdata:/data/db -e MONGO_INITDB_ROOT_USERNAMEtestmongo -e MONGO_INITDB_ROOT_PASSWORDtest123456 mongodb:4.0.112.項目實戰 <dependencies><dependency><groupId>org.m…

Java設計模式之《工廠模式》

目錄 1、介紹 1.1、定義 1.2、優缺點 1.3、使用場景 2、實現 2.1、簡單工廠模式 2.2、工廠方法模式 2.3、抽象工廠模式 3、小結 前言 在面向對象編程中&#xff0c;創建對象實例最常用的方式就是通過 new 操作符構造一個對象實例&#xff0c;但在某些情況下&#xff0…

【異步】js中異步的實現方式 async await /Promise / Generator

JS的異步相關知識 js里面一共有以下異步的解決方案 傳統的回調 省略 。。。。 生成器 Generator 函數是 ES6 提供的一種異步編程解決方案, 語法上&#xff0c;首先可以把它理解成&#xff0c;Generator 函數是一個狀態機&#xff0c;封裝了多個內部狀態。執行 Generator 函數…

JVM字節碼文件結構

Class文件結構class文件是二進制文件&#xff0c;這里要介紹的是這個二級制文件的結構。思考&#xff1a;一個java文件編譯成class文件&#xff0c;如果要描述一個java文件&#xff0c;需要哪些信息呢&#xff1f;基本信息&#xff1a;類名、父類、實現哪些接口、方法個數、每個…

11.web api 2

5. 操作元素屬性 5.1操作元素常用屬性 &#xff1a;通過 JS 設置/修改標簽元素屬性&#xff0c;比如通過 src更換 圖片最常見的屬性比如&#xff1a; href、title、src 等5.2 操作元素樣式屬性 &#xff1a;通過 JS 設置/修改標簽元素的樣式屬性。使用 className 有什么好處&a…

java中數組和list的區別是什么?

在Java中&#xff0c;數組&#xff08;Array&#xff09;和List&#xff08;通常指java.util.List接口的實現類&#xff0c;如ArrayList、LinkedList&#xff09;是兩種常用的容器&#xff0c;但它們在設計、功能和使用場景上有顯著區別。以下從核心特性、使用方式等方面詳細對…

Python爬取推特(X)的各種數據

&#x1f31f; Hello&#xff0c;我是蔣星熠Jaxonic&#xff01; &#x1f308; 在浩瀚無垠的技術宇宙中&#xff0c;我是一名執著的星際旅人&#xff0c;用代碼繪制探索的軌跡。 &#x1f680; 每一個算法都是我點燃的推進器&#xff0c;每一行代碼都是我航行的星圖。 &#x…

Oracle數據庫文件管理與空間問題解決指南

在Oracle數據庫運維中&#xff0c;表空間、數據文件及相關日志文件的管理是保障數據庫穩定運行的核心環節。本文將系統梳理表空間與數據文件的調整、關鍵文件的移動、自動擴展配置&#xff0c;以及常見空間不足錯誤的排查解決方法&#xff0c;為數據庫管理員提供全面參考。 一、…

華為實驗綜合小練習

描述&#xff1a; 1 內網有A、B、C 三個部門。所在網段如圖所示。 2 內網服務器配置靜態IP,網關192.168.100.1。 3 sw1和R1之間使用vlan200 192.168.200.0/30 互聯。 4 R1向運營商申請企業寬帶并申請了5個公網IP&#xff1a;200.1.1.1-.5子網掩碼 255.255.255.248&#xff0c;網…

Flink面試題及詳細答案100道(1-20)- 基礎概念與架構

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

爬蟲逆向之滑塊驗證碼加密分析(軌跡和坐標)

本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的。否則由此產生的一切后果均與作者無關&#xff01;在爬蟲開發過程中&#xff0c;滑塊驗證碼常常成為我們獲取數據的一大阻礙。而滑塊驗證碼的加密方式多種多樣&#xff0c;其中軌跡加密和坐標加密是比較常見的…

微信小程序實現導航至目的地

本人做的導航頁面相關功能和效果的代碼 javascript相關 Page({data: {markers: [],latitude: , // 中心點坐標longitude: ,FIXED_LAT: 31.2304, // 1. 寫死的目標點坐標, 示例&#xff1a;上海人民廣場FIXED_LNG: 121.4737},onLoad: function () {// 如果要顯示地圖可以看onLo…

中國科學社簡史

中國科學社簡史中國科學社&#xff0c;作為中國近代史上第一個民間綜合性科學團體&#xff0c;為中國現代科學文化事業的發展做出了卓越貢獻。其歷程不僅見證了中國科學從萌芽到蓬勃發展的轉變&#xff0c;還反映了中國科學體制化的艱難探索與輝煌成就。中國科學社的起源可追溯…

若爾當型,Jordon Form

文章目錄一、相似二、若爾當型1.1 認識若爾當型1.2 凱萊-哈密頓定理 (Cayley-Hamilton Theorem)一、相似 Every matrix CB?1ABC B^{-1}ABCB?1AB has the same eigenvalues as A. These C’s are similar to A. 任意一個矩陣C&#xff0c;滿足 CB?1ABC B^{-1}ABCB?1AB 都和…

解決uni-app微信小程序編譯報錯:unexpected character `1`

問題原因在uni-app微信小程序開發中&#xff0c;當template模板中包含英文符號<或>時&#xff0c;微信小程序的編譯器會將這些符號誤認為是HTML標簽的開閉符號&#xff0c;從而導致類似unexpected character 1的編譯錯誤。錯誤示例<view class"plan-bmi">…

[Linux] RAID存儲技術

目錄 RAID實現方式 RAID 0 RAID 1 RAID 5 RAID 10 管理RAID0 創建RAID 查看RAID 格式化和掛載 刪除RAID 管理RAID1 創建RAID 查看RAID 格式化和掛載 增加熱備盤 模擬故障 刪除故障磁盤 刪除RAID 管理RAID5 創建RAID 查看RAID md5設備劃分分區 RAID實現方…