滑動視窗類演算法題

2022-07-08 18:48:16 字數 836 閱讀 1966

力扣位址

時間複雜度有點高,o(n3),通不過測試,要進行優化

func minsubarraylen(s int, nums int) int 

sum := 0

for k := i;k<=j;k++

if sum >= s}}

//沒有找到滿足條件的連續子陣列,返回0

if min == length + 1

return min

}

優化方向:暴力破解第三個for迴圈其實可以去除的,因為我們對[i,j]陣列求和是乙個連續的過程,是乙個乙個新增元素的,他們滿足sum[i,j] = sum[i,j-1] + nums[j].
func minsubarraylen(s int, nums int) int 

if j > i

if sum >= s}}

//沒有找到滿足條件的連續子陣列,返回0

if min == length + 1

return min

}

優化思路:第二個for迴圈還是可以加快點,因為陣列和sum[i,j]是有序增加的,所以就想到二分查詢的優化方法。
func minsubarraylen(s int, nums int) int else if r+1= s && r-l+1 < min

}if min == length +1

return min

}

無重複字元的最長子串

find all anagrams in a string

最小覆蓋子串 && 76. minimum window substring

滑動視窗演算法 演算法 滑動視窗 二

演算法 這算是滑動視窗的另外乙個典型題目,在資料量比較少的時候,可以直接採用暴力法解決 不過資料量比較大的時候,我們就需要想辦法解決視窗裡面最大值的思路,這裡我們採用雙端佇列queue來實現,借助 queue來儲存前面計算過的最大值資訊。題目 解法1 暴力解法 按照 視窗大小,從頭到尾依次遍歷,將每...

演算法 滑動視窗

一.滑動視窗 滑動視窗其實就是高階版的雙指標技巧,只不過它依靠了資料結構 hashmap,hashset 的幫助,使得雙指標運用起來更加的靈活,更加的方便,他主要就是來解決子字串匹配問題。他主要的思路就是這樣的固定步驟 1 我們在字串 s 中使用雙指標中的左右指標技巧,初始化 left right ...

演算法 滑動視窗

最多可以將k個值從0變成1,因此滑動視窗的限制條件 0的數量 zeros 小於k,演算法過程如下 有乙個滑動視窗 slipper 每次都會從a中讀入乙個數 當讀入的數為0時,zeros 當zeros的數量大於k時,會取出slipper首部的元素,當取值為0時zeros 總體 如下 上述演算法效率並不...