力扣 滑動視窗

2021-10-09 04:16:33 字數 2161 閱讀 8565

所謂滑動視窗,其實就是雙指標有規律的移動,解決要在問題的集合中找到乙個最大/最小區間符合條件的答案。

食用說明:

1.2兩題是對陣列/數字的處理。 思路大概相通,但有乙個重要差異,文中會談到。

3.4.5題需要處理字串。方式和處理數字要複雜一點點,也有很明晰的框架。

第5題和第一題也有異曲同工之處。最後會說明。

8/17結束, 不再更新

8/13 力扣1004.

}}8/15 力扣209.

}}從上面兩道題來看,整個**的框架沒有什麼大區別, 不同的地方就是在**更新結果 。第一道題問最大長度,在擴充套件的過程中就有可能會獲得答案,不一定需要滿足條件, 於是在擴大視窗中不斷更新答案。

第二道題求長度最小,要求一定會在滿足條件的最小條件下,也就是縮短視窗內更新答案。

8/16.力扣567

和上兩道題處理陣列不同,滑動視窗在處理字串時情況可能要更複雜一些,主要是體現在視窗的擴大和縮小時的具體操作。

思路:

class

solution

while

(match==s1.

length()

)}}return

false;}

}

8/16力扣76.

到目前為止已經刷了3道題,發現滑動視窗框架確實比較明顯,這道題的思路和上題也差不多,變化的就是對結果的處理和一些順序。

class

solution

while

(match==t.

length()

) ch=str[left]

; window[ch]--;

if(map[ch]

>

0&& window[ch]

< map[ch])

left++;}

}return res ;

}}

擴充套件:找到字串中所有字母異位詞 力扣438.

刷到這題,無壓力了,權當熟悉框架來做。

class

solution

while

(match==p.

length()

)}}return ans ;

}}

再來一題別出新裁的:

8/16力扣424.

本題是第一題難一點的版本,難在**?

首先,第一題0和1只有兩種情況,非常好判斷, 而這道題一看,需要面對26種情況,乍一看很複雜,其實經過思考,它面對的也是2種情況。

解題思路:

用乙個freq代表視窗內出現頻率最大的字母,k次替換肯定是將視窗內其餘字母全部替換成該字母。

class

solution

len=math.

max( len, right-left);}

return len ;

}}

力扣 滑動視窗問題

1.76.最小覆蓋子串,兩個map,滑動視窗,left移動條件是匹配計數 s1的map.size 2.567.字串的排列,看似和上個類似,但是移動條件,很神奇 3.424.替換後的最長重複字元,這個挺難的,將問題轉換為視窗內除了出現次數最多的字元外,其他的字元出現次數不能多於k,這個就是left縮小...

力扣題解 滑動視窗最大值

題目 給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。1 3 1 3 5 3 6 7 3 1 3 1 3 5 3 6 7 3 1 3 1 3 5 3 6 7 5 1 3 ...

2 3 力扣 滑動視窗中位數

如題 他這是為難我胖虎!中位數是有序序列最中間的那個數。如果序列的長度是偶數,則沒有最中間的數 此時中位數是最中間的兩個數的平均數。例如 給你乙個陣列 nums,有乙個長度為 k 的視窗從最左端滑動到最右端。視窗中有 k 個數,每次視窗向右移動 1 位。你的任務是找出每次視窗移動後得到的新視窗中元素...