滑動窗口2

1. 水果成籃(904)

題目描述:
在這里插入圖片描述
算法原理:
根據題目意思,friuts表示第i棵樹上的水果種類,然后我們有兩個籃子去在這些樹上去采水果,但是有限制就是一個籃子里就只能裝一種水果,也就是我們在根據fruits數組去采摘水果的時候,水果種類達到第三種的時候就立刻停止采摘。
綜上我們可以先定義一個hash表,類型為(int,int),第一個序號表示水果的種類,第二個序號表示這種水果在籃子中的總數。此時我們就可以將這里的問題想成滑動窗口問題,根據我們之前總結的滑動窗口的問題,不難發現這里的進窗口就是直接根據fruits數組放入水果的過程,當hash表的size也就是水果種類大于2時,就開始出窗口,對于出窗口的過程首先將fruit[left]對應得水果種類在hash表中的數量減一,然后注意如果此時對應種類的水果數量為0那么就要在hash表中移除這種水果也就是hash表的size減一,最后照舊left++,然后重復上述出窗口的操作,直至籃子中的水果種類等于二時跳出,此時籃子中的水果就是滿足題目條件的,因此我們就可以去更新返回值也就是籃子中水果的最大數目。具體看代碼。
代碼如下:

class Solution {public int totalFruit(int[] fruits) {int n = fruits.length;int ret = 0;Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (int left = 0, right = 0; right < n; right++) {int in = fruits[right];map.put(in, map.getOrDefault(in, 0) + 1);while (map.size() > 2) {int out = fruits[left];map.put(out, map.get(out) - 1);if (map.get(out) == 0) {map.remove(out);}left++;}ret = Math.max(ret, right - left + 1);}return ret;}
}

題目鏈接

2. 找到字符串中所有字母異位詞(438)

題目描述:
在這里插入圖片描述
算法原理:
首先明白題目給出的異位詞是什么意思,舉例來說就是"abc"和"bac"互為異位詞,就是說一個字符串如果是另一個字符串打亂順序后的結果就是它的異位詞,很好理解。
然后題目要求我們去在字符串s的子串中去找到字符串p的異位詞,理解了以上內容我們就可以使用滑動窗口的方法去解決這個問題。
我們先使用一個數組來記錄字符串p的各個字符的數量,然后開始基于字符串s來進行進窗口的操作,也是使用一個數組來記錄各個進窗口的字符數量,當進窗口的字符數量超過字符串p中的字符數量時開始出窗口,首先對數組中的s[left]對應字符的數量減一,之后left++,當窗口內的字符數量恢復到p中的字符數量時跳出循環,然后判斷,p字符串的保存各字符數量的數組和此時保存窗口內各字符數量的數組是否相等,如果相等那么此時就更新結果,也就是更新返回的起始索引,即窗口左邊的索引。
代碼如下:

class Solution {public List<Integer> findAnagrams(String ss, String p) {List<Integer> ret = new ArrayList<>();int[] arrP = new int[26];int[] arrS = new int[26];char[] s = ss.toCharArray();for (char ch : p.toCharArray()) {arrP[ch - 'a']++;}int n = ss.length();int m = p.length();for (int left = 0, right = 0; right < n; right++) {arrS[s[right] - 'a']++;while (right - left + 1 > m) {arrS[s[left++] - 'a']--;}if (Arrays.equals(arrP, arrS)) {ret.add(left);}}return ret;}
}

優化:
當我們使用數組比較這種方法來驗證是否當前窗口下的字符構成字符串p的異位詞時,雖然代碼是可以直接使用Arrays類的靜態方法equals來比較,但是內部肯定是需要一個循環來實現的,因此我們對代碼進行優化。
相對于前面的代碼,這里優化的代碼只需要加上一個count變量,這是用來記錄窗口內的有效字符數量。那么什么是有效字符,就是在字符串p中包含的字符,但是一旦加入窗口中的單種字符個數超過字符串p中的對應的字符數量,那么這個字符也不是有效字符。例如字符串p為"abc"此時窗口內字符為"aab"此時有效字符數量為2。
因此在進窗口時對s[right]進行判斷,是否此時窗口內該字符的數量在加一后是小于等于p字符串中相同字符的數量的,只有這樣count才能加一。當窗口內的字符數量超出字符串p的字符數量時開始出窗口,此時也要進行判斷是否s[left]出窗口后,窗口內的對應字符數量是否小于p中相同字符的數量,如果小于count才能減一。跳出出窗口循環后就進行判斷,是否此時窗口內有效字符數量count和p字符長度相等,如果相等就說明窗口內字符是p的異位詞,更新返回結果。
優化后代碼:

class Solution {public List<Integer> findAnagrams(String ss, String p) {List<Integer> ret = new ArrayList<>();int[] arrP = new int[26];int[] arrS = new int[26];char[] s = ss.toCharArray();int count = 0;for (char ch : p.toCharArray()) {arrP[ch - 'a']++;}int n = ss.length();int m = p.length();for (int left = 0, right = 0; right < n; right++) {arrS[s[right] - 'a']++;if (arrS[s[right] - 'a'] <= arrP[s[right] - 'a']) {count++;}while (right - left + 1 > m) {arrS[s[left] - 'a']--;if (arrS[s[left] - 'a'] < arrP[s[left] - 'a']) {count--;}left++;}if (count == m) {ret.add(left);}}return ret;}
}

題目鏈接

3. 串聯所有單詞的子串(30)

題目描述:
在這里插入圖片描述

算法原理:
這一題和上一題異位詞如出一轍,做題的思想完全一致,只不過上一題進窗口出窗口的單位是字符,這一題則是一個子串,也是用到了上一題當中的優化的使用count計數的方法。然后需要注意一個不一樣的點就是,因為每次進窗口出窗口的字符串單位不一定是總的字符串s的因子,所以為了遍歷各種可能我們需要在最外層再多套上一層循環,具體看代碼。
代碼如下:

class Solution {public List<Integer> findSubstring(String s, String[] words) {int len = words[0].length();int aim = words.length;List<Integer> list = new ArrayList<>();HashMap<String, Integer> hash = new HashMap<>();for (String str : words) {hash.put(str, hash.getOrDefault(str, 0) + 1);}int n = s.length();for (int i = 0; i < len; i++) {HashMap<String, Integer> temp = new HashMap<>();for (int left = i, right = i, count = 0; right + len <= n; right += len) {String in = s.substring(right, right + len);temp.put(in, temp.getOrDefault(in, 0) + 1);if (hash.getOrDefault(in, 0) != 0 && temp.get(in) <= hash.get(in)) {count++;}while (right - left + 1 > aim * len) {String out = s.substring(left, left + len);temp.put(out, temp.get(out) - 1);if (hash.getOrDefault(out, 0) != 0 && temp.get(out) < hash.get(out)) {count--;}left += len;}if (count == aim) {list.add(left);}}}return list;}
}

題目鏈接

4. 最小覆蓋子串(76)

題目描述:
在這里插入圖片描述

算法原理:
還是根據第二題異位詞的方法,使用count計數的方式來完成這題,但是與前者不同的在于前者要求滿足的子串必須每一個字符及其數量和t要一一對應,但是這一題不一樣,它只需要將t的各個字符包含進子串即可,因此我們這里選擇使用count來表達字符的種類,當窗口內的相應的字符種類達到要求時就進入出窗口的循環。對于返回值的更新直接放到出窗口循環當中了,因為此時的窗口范圍的子串都是滿足題目條件的直接更新就可以了。
代碼如下:

class Solution {public String minWindow(String ss, String tt) {Map<Character, Integer> hash1 = new HashMap<>();Map<Character, Integer> hash2 = new HashMap<>();char[] s = ss.toCharArray();char[] t = tt.toCharArray();for (char ch : t) {hash1.put(ch, hash1.getOrDefault(ch, 0) + 1);}int n = ss.length();int aim = hash1.size();int minL = Integer.MAX_VALUE;int begin = -1;for (int left = 0, right = 0, count = 0; right < n; right++) {char in = s[right];hash2.put(in, hash2.getOrDefault(in, 0) + 1);if (hash1.containsKey(in) && hash1.get(in).equals(hash2.get(in))) {count++;}while (count == aim) {if ((right - left + 1) < minL) {minL = right - left + 1;begin = left;}char out = s[left];hash2.put(out, hash2.get(out) - 1);if (hash1.containsKey(out) && hash2.get(out) < hash1.get(out)) {count--;}left++;}}return begin == -1 ? "" : ss.substring(begin, begin + minL);}
}

題目鏈接

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

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

相關文章

矩陣運算在數據分析中的應用

矩陣運算在數據分析中的應用 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 矩陣運算作為數學和計算機科學中的重要概念&#xff0c;在數據分析和科學計算中發…

elasticsearch源碼分析-03選舉集群狀態

選舉集群狀態 es中存儲的數據有一下幾種&#xff0c;state元數據、lucene索引文件、translog事務日志 元數據信息可以分為&#xff1a; 集群層面的元信息-對應著metaData數據結構&#xff0c;主要是clusterUUid、settings、templates等索引層面的元信息-對應著indexMetaData數…

RK35x8通過TFTP下載內核到開發板

對于有網線接口的RK35X8開發板&#xff0c;調試時候&#xff0c;可以通過網線下載內核鏡像和設備樹到開發板&#xff0c;不用每次修改驅動都要重新打開下載工具&#xff0c;進入下載模式。通過TFTP可以大大提高調試效率。 在ubuntu安裝TFTP服務 安裝tftp服務器 sudo apt-get…

【面試系列】前端開發工程師高頻面試題及詳細解答

歡迎來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;歡迎訂閱相關專欄&#xff1a; ?? 全網最全IT互聯網公司面試寶典&#xff1a;收集整理全網各大IT互聯網公司技術、項目、HR面試真題. ?? AIGC時代的創新與未來&#xff1a;詳細講解AIGC的概念、核心技術、…

Python商務數據分析知識專欄(二)——Python數據分析基礎

Python商務數據分析知識專欄&#xff08;二&#xff09;——Python數據分析基礎 一、Python數據分析概述二、Numpy數值計算基礎專欄二&#xff08;Python數據分析基礎&#xff09;的總結 與 專欄三&#xff08;Python數據分析的應用&#xff09;開端 一、Python數據分析概述 二…

【筆記】Spring Cloud Gateway 實現 gRPC 代理

Spring Cloud Gateway 在 3.1.x 版本中增加了針對 gRPC 的網關代理功能支持,本片文章描述一下如何實現相關支持.本文主要基于 Spring Cloud Gateway 的 官方文檔 進行一個實踐練習。有興趣的可以翻看官方文檔。 由于 Grpc 是基于 HTTP2 協議進行傳輸的&#xff0c;因此 Srping …

深度學習之Transformer模型的Vision Transformer(ViT)和Swin Transformer

Transformer 模型最初由 Vaswani 等人在 2017 年提出,是一種基于自注意力機制的深度學習模型。它在自然語言處理(NLP)領域取得了巨大成功,并且也逐漸被應用到計算機視覺任務中。以下是兩種在計算機視覺領域中非常重要的 Transformer 模型:Vision Transformer(ViT)和 Swi…

git 個人常見錯誤備注

問題1&#xff1a;all conflict fixed but you are still merging。。。。。 如果你已經解決了所有沖突&#xff0c;但 Git 仍然提示你正在進行合并&#xff0c;可能是因為你還沒有完成合并過程。以下是詳細步驟&#xff0c;確保你正確完成合并并提交更改&#xff1a; 確認所…

Tongsuo(銅鎖)項目介紹 - 實現國密SSL協議

文章介紹 銅鎖(Tongsuo)是一個提供現代密碼學算法和安全通信協議的開源基礎密碼庫,為存儲、網絡、密鑰管理、隱私計算、區塊鏈等諸多業務場景提供底層的密碼學基礎能力,實現數據在傳輸、使用、存儲等過程中的私密性、完整性和可認證性,為數據生命周期中的隱私和安全提供保…

鴻蒙 如何 url decode

在 TypeScript 和 JavaScript 中進行 URL 編碼的最簡單方式是使用內置的 global 函數 encodeURIComponent()。以下是一個示例&#xff1a; let url "https://example.com/?name測試&job開發者"; let encodedURL encodeURIComponent(url); console.log(encode…

【RAG】FoRAG:面向網絡增強型長形式問答的事實性優化RAG

一、解決問題 在基于網絡的長形式問答&#xff08;Web-enhanced Long-form Question Answering, LFQA&#xff09;任務中&#xff0c;現有RAG在生成答案時存在的問題&#xff1a; 事實性不足&#xff1a;研究表明&#xff0c;現有系統生成的答案中只有大約一半的陳述能夠完全得…

Qt開發筆記:Qt3D三維開發筆記(一):Qt3D三維開發基礎概念介紹

若該文為原創文章&#xff0c;轉載請注明原文出處 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/140059315 長沙紅胖子Qt&#xff08;長沙創微智科&#xff09;博文大全&#xff1a;開發技術集合&#xff08;包含Qt實用技術、樹莓派、三維、O…

匯編語言基礎教程

匯編語言基礎教程 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將深入探討匯編語言的基礎知識和應用&#xff0c;幫助大家理解匯編語言在計算機編程中…

來自Claude官方的提示詞庫,支持中文!建議收藏!

大家好,我是木易,一個持續關注AI領域的互聯網技術產品經理,國內Top2本科,美國Top10 CS研究生,MBA。我堅信AI是普通人變強的“外掛”,所以創建了“AI信息Gap”這個公眾號,專注于分享AI全維度知識,包括但不限于AI科普,AI工具測評,AI效率提升,AI行業洞察。關注我,AI之…

多元時間序列分析——VAR(向量自回歸模型)

VAR模型主要是考察多個變量之間的動態互動關系&#xff0c;從而解釋各種經濟沖擊對經濟變量形成的動態影響。這種動態關系可通過格蘭杰因果關系、脈沖響應以及方差分解來進一步明確和可視化。VAR模型主要研究內生變量之間的關系&#xff0c;內生變量就是參與模型并由模型體系內…

通天星CMSV6車載監控平臺CompanyList信息泄露漏洞

1 漏洞描述 通天星CMSV6車載視頻監控平臺是東莞市通天星軟件科技有限公司研發的監控平臺,通天星CMSV6產品覆蓋車載錄像機、單兵錄像機、網絡監控攝像機、行駛記錄儀等產品的視頻綜合平臺。通天星科技應用于公交車車載、校車車載、大巴車車載、物流車載、油品運輸車載、警車車…

推薦一款程序員的搞錢神器

你是不是經常為開發環境的搭建而頭疼&#xff1f;有沒有遇到過因為接口開發而焦頭爛額的情況&#xff1f;作為一名程序員&#xff0c;特別是獨立開發者&#xff0c;這些問題是不是常常讓你覺得心力交瘁&#xff1f;別擔心&#xff0c;現在有一個神器&#xff0c;能讓你擺脫這些…

五、golang基礎之slice和map

文章目錄 一、slice&#xff08;一&#xff09;含義&#xff08;二&#xff09;定義切片&#xff08;三&#xff09;切片初始化&#xff08;四&#xff09;len() 和 cap() 函數&#xff08;五&#xff09;空(nil)切片&#xff08;六&#xff09;切片截取&#xff08;七&#xf…

2024HVV最新POC/EXP,目前有8000+個POC/EXP

點擊"仙網攻城獅”關注我們哦~ 不當想研發的滲透人不是好運維 讓我們每天進步一點點 簡介 都是網上收集的POC和EXP&#xff0c;最新收集時間是2024年五月&#xff0c;需要的自取。 表里沒有的可以翻翻之前的文章&#xff0c;資源比較零散沒有整合起來。 文件鏈接&#xff…

hexo博客搭建

系列文章目錄 文章目錄 系列文章目錄前言1. 環境配置2. 打包并發布到github倉庫3. 生成ssh秘鑰4.vscode配置本地與遠端相對路徑不一致問題總結 前言 本文主要介紹了hexo博客怎么搭建 1. 環境配置 安裝git、nodejs、npm創建博客文件夾blogcmd輸入命令npm install -g hexo初始化…