演算法訓練營 滑動視窗的解釋與構造

2022-10-09 06:33:11 字數 2103 閱讀 7414

簡介

在演算法的問題中,如果構造的儲存抽象為陣列,那麼有時會遇到一類問題:(最大長度、最小長度)的字串。

固定的滑動視窗,可以認為值乙個訊號量的區域性取樣:

演算法問題中,考慮的層次更為廣泛:有乙個大小可變的視窗,左右兩端方向一致向前滑動。

假設有陣列[a b c d e f g h]

乙個大小為3的滑動視窗在其上滑動,則有:

[a b c]

[b c d]

[c d e]

[d e f]

[e f g]

[f g h]

演算法思想

1.採用雙指標的技巧取樣區域性資料

2.先增加右邊界,如果子串行符合要求,再固定右邊界,調整左邊界,判斷是否符合要求

3.重複上述步驟,直到遍歷完畢

演算法模板

var template = function(s)

}

實戰演練--3.無重複字元的最長子串

給定乙個字串 s ,請你找出其中不含有重複字元的 最長子串 的長度。

示例 1:

輸入: s = "abcabcbb"

輸出: 3

解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。

示例 2:

輸入: s = "bbbbb"

輸出: 1

解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。

示例 3:

輸入: s = "pwwkew"

輸出: 3

解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。

請注意,你的答案必須是 子串 的長度,"pwke" 是乙個子串行,不是子串。

0 <= s.length <= 5 * 104s 由英文本母、數字、符號和空格組成

/**

* @param s

* @return

*/var lengthoflongestsubstring = function(s)

while(idx參考文獻

實戰演練--567.字串的排列

給你兩個字串s1

s2,寫乙個函式來判斷s2是否包含s1的排列。如果是,返回true;否則,返回false

換句話說,s1的排列之一是s2的 子串 。

示例 1:

輸入:s1 = "ab" s2 = "eidbaooo"

輸出:true

解釋:s2 包含 s1 的排列之一 ("ba").

示例 2:

輸入:s1= "ab" s2 = "eidboaoo"

輸出:false

1 <= s1.length, s2.length <= 104s1 和 s2 僅包含小寫字母/**

* @param s1

* @param s2

* @return

*/var checkinclusion = function(s1, s2)

var cnt_s1 = new array(26).fill(0);

var cnt_s2 = new array(26).fill(0);

for(var i=0;i參考文獻

資料結構與演算法訓練營

學習過程 cliarifation 確定題目 possible solutions 盡可能的多思考解題方式 coding 多寫 test case 寫測試用例 讀題 思考 直接看解法,比較不同解法的優劣 背誦 默寫 自己寫多種解法比較 一天之後反覆練習 一周之後再練習 面試之前恢復訓練 資料結構分類...

演算法訓練營(六)雜湊表 對映 集合的實現與特性

目錄 精 面試解題思路 一 hash table 1.有效的字母異位詞 方法一方法二 2.字母異位詞分組 雜湊表 hash table 也叫雜湊表,是根據關鍵碼值 key value 而直接進行訪問的資料結構。它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫作雜湊函式 ...

vue訓練營4 vue中的diff演算法

原始碼分析1 diff的必要性,src core instance lifecycle.jslifecycle.js mountcomponent 元件中可能存在很多個 data 中的key使用 原始碼分析2 diff的執行方式,src core vdom patch.js patchvnode p...