暑假算法日記第一天

目標?:刷完靈神專題訓練算法題單

階段目標📌:【算法題單】滑動窗口與雙指針

LeetCode題目:

  • 1456. 定長子串中元音的最大數目
  • 643. 子數組最大平均數 I
  • 1343. 大小為 K 且平均值大于等于閾值的子數組數目
  • 2090. 半徑為 k 的子數組平均值
  • 2379. 得到 K 個黑塊的最少涂色次數
  • 2841. 幾乎唯一子數組的最大和

其他:

今日總結


1456. 定長子串中元音的最大數目

跳轉: 1456. 定長子串中元音的最大數目

學習: 靈神:教你解決定長滑窗!

問題:

給你字符串 s 和整數 k

請返回字符串 s 中長度為 k 的單個子字符串中可能包含的最大元音字母數。

英文中的 元音字母 為(a, e, i, o, u)。

思路:

定長滑動窗口,先裝入元素,根據題目要求更新,窗口滿員則下次裝入前先退出末尾元素。

復雜度:

  • 時間復雜度: O(n)O(n)O(n)
  • 空間復雜度: O(1)O(1)O(1)

代碼:

class Solution:def maxVowels(self, s: str, k: int) -> int:ans = vowel = 0for i,c in enumerate(s):if c in "aeiou":vowel += 1if i < k - 1:continueans = max(ans,vowel)if s[i - k + 1] in "aeiou":vowel -= 1return ans

643. 子數組最大平均數 I

跳轉: 643. 子數組最大平均數 I

問題:

給你一個由 n 個元素組成的整數數組 nums 和一個整數 k

請你找出平均數最大且 長度為 k 的連續子數組,并輸出該最大平均數。

任何誤差小于 10-5 的答案都將被視為正確答案。

思路:

滑動窗口求最大值,題目條件保證 k<=nk <= nk<=n 。可以先初始化為前k個元素作為初始窗口,然后邊移動邊比較
本質上還是入-更新-出,相當于初始化并更新,然后倒出-裝入-更新。倒出-裝入一步完成

復雜度:

  • 時間復雜度: O(n)O(n)O(n)
  • 空間復雜度: O(1)O(1)O(1)

代碼:

class Solution:def findMaxAverage(self, nums: List[int], k: int) -> float:maxArgv = temp = sum(nums[:k])for idx in range(0,len(nums)-k):temp += nums[idx+k] - nums[idx]maxArgv = max(maxArgv,temp)return maxArgv / k

1343. 大小為 K 且平均值大于等于閾值的子數組數目

跳轉: 1343. 大小為 K 且平均值大于等于閾值的子數組數目

問題:

給你一個整數數組 arr 和兩個整數 kthreshold

請你返回長度為 k 且平均值大于等于 threshold 的子數組數目。

思路:

這里要求計數,首先threshold與k是整數,商和除數為整數的情況下求被除數不用考慮精度,所以可以直接用threshold * k卡計數條件,初始化-更新,出入-更新滑動窗口即可。

復雜度:

  • 時間復雜度: O(n)O(n)O(n)
  • 空間復雜度: O(1)O(1)O(1)

代碼:

class Solution:def numOfSubarrays(self, arr: List[int], k: int, threshold: int) -> int:ans = 0Bound = threshold * ktemp = sum(arr[:k])if temp >= Bound:ans += 1for idx in range(0,len(arr)-k):temp += arr[idx + k] - arr[idx]if temp >= Bound:ans += 1return ans

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

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

問題:

給你一個下標從 0 開始的數組 nums ,數組中有 n 個整數,另給你一個整數 k

半徑為 k 的子數組平均值 是指:nums 中一個以下標 i中心半徑k 的子數組中所有元素的平均值,即下標在 i - ki + k 范圍( i - ki + k)內所有元素的平均值。如果在下標 i 前或后不足 k 個元素,那么 半徑為 k 的子數組平均值-1

構建并返回一個長度為 n 的數組 avgs ,其中 avgs[i] 是以下標 i 為中心的子數組的 半徑為 k 的子數組平均值

x 個元素的 平均值x 個元素相加之和除以 x ,此時使用截斷式 整數除法 ,即需要去掉結果的小數部分。

  • 例如,四個元素 2315 的平均值是 (2 + 3 + 1 + 5) / 4 = 11 / 4 = 2.75,截斷后得到 2

思路:

可以看作是窗口大小為 2 * k + 1 的滑動窗口,但更新是在中點處更新,這里采用覆蓋的方式更新值
本質上還是入-更新-出,相當于初始化并更新,然后倒出-裝入-更新。倒出-裝入一步完成

復雜度:

  • 時間復雜度: O(n)O(n)O(n)
  • 空間復雜度: O(n)O(n)O(n)

代碼:

class Solution:def getAverages(self, nums: List[int], k: int) -> List[int]:size = k * 2 + 1avgs = [-1 for _ in range(len(nums))]if len(nums) < size:return avgstemp = sum(nums[:size])avgs[k] = temp // sizefor idx in range(0,len(nums) - size):temp += nums[idx + size] - nums[idx]avgs[idx + k + 1] = temp // sizereturn avgs

2379. 得到 K 個黑塊的最少涂色次數

跳轉: 2379. 得到 K 個黑塊的最少涂色次數

問題:

給你一個長度為 n 下標從 0 開始的字符串 blocksblocks[i] 要么是 'W' 要么是 'B' ,表示第 i 塊的顏色。字符 'W''B' 分別表示白色和黑色。

給你一個整數 k ,表示想要 連續 黑色塊的數目。

每一次操作中,你可以選擇一個白色塊將它 涂成 黑色塊。

請你返回至少出現 一次 連續 k 個黑色塊的 最少 操作次數。

思路:

相當于在大小為k的窗口中求白色快最少數量
每一個都需要判斷,不是簡單加和,所以不能偷懶,入-更新-出

復雜度:

  • 時間復雜度: O(n)O(n)O(n)
  • 空間復雜度: O(1)O(1)O(1)

代碼:

class Solution:def minimumRecolors(self, blocks: str, k: int) -> int:ans = ktemp = 0for idx,value in enumerate(blocks):if value == 'W':temp += 1if idx < k - 1:continueans = min(temp,ans)if blocks[idx - k + 1] == 'W':temp -= 1return ans

2841. 幾乎唯一子數組的最大和

跳轉: 2841. 幾乎唯一子數組的最大和

問題:

給你一個整數數組 nums 和兩個正整數 mk

請你返回 nums 中長度為 k幾乎唯一 子數組的 最大和 ,如果不存在幾乎唯一子數組,請你返回 0

如果 nums 的一個子數組有至少 m 個互不相同的元素,我們稱它是 幾乎唯一 子數組。

子數組指的是一個數組中一段連續 非空 的元素序列。

思路:

入-更新-出,但只在滿足不重復元素大于等于m的情況下更新
這里維護字典鍵值對數來判斷不重復元素有多少

復雜度:

  • 時間復雜度: O(n)O(n)O(n)
  • 空間復雜度: O(1)O(1)O(1)

代碼:

class Solution:def maxSum(self, nums: List[int], m: int, k: int) -> int:ans = cnt = 0dict_num = {}for idx,num in enumerate(nums):cnt += numif num in dict_num:dict_num[num] += 1else:dict_num[num] = 1if idx < k - 1:continueif len(dict_num) >= m:ans = max(ans,cnt)temp = nums[idx - k + 1]cnt -= tempif dict_num[temp] == 1:del dict_num[temp]else:dict_num[temp] -= 1return ans

總結

練習了定長滑動窗口基礎題目,思路模板為入-更新-出,不一定是簡單的增刪改元素,要考慮有條件的增刪改

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

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

相關文章

【軟考高項】信息系統項目管理師-第1章 信息化發展(1.5 數字化轉型與元宇宙、1.6 標題類知識點、1.7 十四五規劃內容匯總)

文章大綱 第1章 信息化發展1.5 數字化轉型與元宇宙1.5.1 數字化轉型1.5.2 元宇宙1.6 標題類知識點1.7 十四五規劃內容匯總1.8 10道試題第1章 信息化發展 學習建議: 此章內容大部分為新增內容,基本是全新的章節2023年5月考試2分選擇,5分案例2023年下半年各批次選擇題2分左右1.…

STM32F103C8T6單片機內部執行原理及啟動流程詳解

引言&#xff1a;為什么深入理解STM32啟動流程很重要&#xff1f;STM32F103C8T6作為嵌入式開發中最常用的單片機之一&#xff0c;其內部執行原理和啟動流程是理解嵌入式系統底層運行機制的核心。無論是開發Bootloader、調試HardFault異常&#xff0c;還是優化系統啟動速度&…

【python 常用的數學科學/計算機視覺等工具】

當然有&#xff01;在科學計算、機器學習、圖像處理等領域&#xff0c;scikit-learn、scikit-image&#xff08;skimage&#xff09;、SciPy、OpenCV 是非常重要的庫&#xff0c;但它們不是唯一的。以下是一些與它們類似或互補的項目&#xff0c;按照用途分類列出&#xff1a; …

LUMP+NFS架構的Discuz論壇部署

一、配置準備 每臺主機都安裝mysql、nfs、php、mysql 對每臺主機都進行關閉防火墻、上下文等&#xff0c;減少阻礙[rooteveryone ~]# systemctl stop firewalld [rooteveryone ~]# setenforce 0安裝插件等[rootlocalhost mysql]# yum install -y nfs-utils nginx [rootlocalho…

C++STL-deque

一.基礎概念deque和vector一樣都是對元素的操作&#xff0c;不同點&#xff1a;vector對元素增刪后元素會往前或往后移&#xff0c;如果數據不大沒有太多影響&#xff0c;如果數據很大效率會變低&#xff1b;deque對元素增刪不會使元素位置改變&#xff0c;所有效率會變高。二.…

字節跳動高質量聲音克龍文字轉語音合成軟件MegaTTS3整合包

MegaTTS3是抖音團隊聯合國內其他大學研發的一款語音合成及聲音克龍應用&#xff0c;可實現零樣本語音克龍及富有情感的自然語音合成。我基于當前最新版制作了免安裝一鍵啟動整合包。 MegaTTS3介紹 MegaTTS 3 是字節跳動&#xff08;ByteDance&#xff09;與浙江大學聯合開發的…

RPC:遠程過程調用機制

目錄 1、概念 2、RPC架構 2.1 RPC的四個核心組件 2.2 訪問流程 3、關鍵概念 3.1 接口定義語言 (IDL - Interface Definition Language) 3.2 序列化與反序列化 (Serialization & Deserialization - Marshalling/Unmarshalling) 3.3 網絡傳輸 (Transport) 3.4 服務發…

EPLAN 電氣制圖(六):電機正反轉副勾主電路繪制

一、項目背景&#xff1a;為什么繪制電機正反轉主電路&#xff1f; 在多功能天車系統中&#xff0c;電機正反轉控制是核心功能之一。通過 EPLAN 繪制主電路&#xff0c;不僅能清晰展示電源分配、換相邏輯和線纜連接&#xff0c;還能為后續 PLC 控制設計奠定基礎。本次以西門子設…

JAVA JVM對象的實現

jvm分配內存給對象的方式1. 內存分配的總體流程對象內存分配的主要步驟&#xff1a;類加載檢查&#xff1a;確認類已加載、解析和初始化。內存分配&#xff1a;根據對象大小&#xff0c;從堆中劃分內存空間。內存初始化&#xff1a;將分配的內存空間初始化為零值&#xff08;不…

CVE-2023-41990/CVE-2023-32434/CVE-2023-38606/CVE-2023-32435

CVE-2023-41990&#xff08;GitLab 命令注入漏洞&#xff09;漏洞原理CVE-2023-41990是GitLab CE/EE&#xff08;社區版/企業版&#xff09;中項目導出功能的一個命令注入漏洞。具體原理如下&#xff1a;①GitLab在導出項目時&#xff0c;會調用git命令生成項目存檔&#xff08…

RAG實戰指南 Day 8:PDF、Word和HTML文檔解析實戰

【RAG實戰指南 Day 8】PDF、Word和HTML文檔解析實戰 開篇 歡迎來到"RAG實戰指南"系列的第8天&#xff01;今天我們將深入探討PDF、Word和HTML文檔解析技術&#xff0c;這是構建企業級RAG系統的關鍵基礎。在實際業務場景中&#xff0c;80%以上的知識都以這些文檔格式…

【AXI】讀重排序深度

我們以DDR4存儲控制器為例&#xff0c;設計一個讀重排序深度為3的具體場景&#xff0c;展示從設備如何利用3級隊列優化訪問效率&#xff1a;基礎設定從設備類型&#xff1a;DDR4存儲控制器&#xff08;支持4個存儲體Bank0-Bank3&#xff09;讀重排序深度&#xff1a;3&#xff…

牛馬逃離北京(回歸草原計劃)

豐寧壩上草原自駕游攻略&#xff08;半虎線深度版&#xff09; &#x1f697; 路線&#xff1a;北京/承德 → 豐寧縣城 → 半虎線 → 大灘鎮&#xff08;2天1夜&#xff09; &#x1f3af; 核心玩法&#xff1a;免費草原、高山牧場、日落晚霞、牧群互動、星空煙花&#x1f33f;…

【前端】【Echarts】ECharts 詞云圖(WordCloud)教學詳解

效果ECharts 詞云圖&#xff08;WordCloud&#xff09;教學詳解 詞云圖是一種通過關鍵詞的大小、顏色等視覺差異來展示文本數據中詞頻或權重的圖表。它直觀、形象&#xff0c;是數據分析和內容展示中的利器。 本文將帶你從零開始&#xff0c;學習如何用 ECharts 的 WordCloud 插…

【arXiv 2025】新穎方法:基于快速傅里葉變換的高效自注意力,即插即用!

一、整體介紹 The FFT Strikes Again: An Efficient Alternative to Self-AttentionFFT再次出擊&#xff1a;一種高效的自注意力替代方案圖1&#xff1a;FFTNet整體流程&#xff0c;包括局部窗口處理&#xff08;STFT或小波變換&#xff0c;可選&#xff09;和全局FFT&#xff…

通過vue如何利用 Three 繪制 簡單3D模型(源碼案例)

目錄 Three 介紹 創建基礎3D場景 創建不同類型的3D模型 1. 球體 2. 圓柱體??????? 3. 平面??????? 加載外部3D模型 添加交互控制 創建可交互的3D場景 Three 介紹 Three.js是一個強大的JavaScript 3D庫&#xff0c;可以輕松地在網頁中創建3D圖形。下面我…

云蝠智能 Voice Agent 落地展會邀約場景:重構會展行業的智能交互范式

一、行業痛點與 AI 破局在會展行業數字化轉型的浪潮中&#xff0c;傳統展會邀約模式面臨多重挑戰&#xff1a;人工外呼日均僅能處理 300-500 通電話&#xff0c;且無效號碼占比高達 40% 以上&#xff0c;導致邀約效率低下。同時&#xff0c;個性化邀約話術設計依賴經驗&#xf…

idea如何打開extract surround

在 IntelliJ IDEA 中&#xff0c;"Extract Surrounding"&#xff08;提取周圍代碼&#xff09;通常指 ?將一段代碼提取到新的方法、變量或類中&#xff0c;但更常見的操作是 ??"Surround With"&#xff08;用代碼結構包圍&#xff09;?。以下是兩種場景…

window顯示驅動開發—XR_BIAS 和 BltDXGI

Direct3D 運行時調用驅動程序的 BltDXGI 函數&#xff0c;以僅對XR_BIAS源資源執行以下操作&#xff1a;復制到也XR_BIAS的目標未修改的源數據的副本可接受點樣本的拉伸旋轉由于 XR_BIAS 不支持 MSAA) (多個示例抗鋸齒&#xff0c;因此驅動程序不需要解析XR_BIAS資源。核心規則…

web網頁開發,在線%ctf管理%系統,基于html,css,webform,asp.net mvc, sqlserver, mysql

webform,asp.net mvc。數據庫支持mysql,sqlserver經驗心得 每次我們寫crud沒啥技術含量&#xff0c;這沒法讓咱們進入大廠&#xff0c;剛好這次與客戶溝通優化方案建議&#xff0c;咱們就把能加的幫他都加上去。一個ctf管理系統基本crud&#xff0c;并進行不同分層開發&#xf…