復(fù)盤|第78場雙周賽
找到一個數(shù)字的 K 美麗值
【模擬】枚舉所有長為 k 的子串。
【數(shù)學(xué)】不斷取最低的 k 位數(shù)字,判斷后,去掉末尾數(shù)字,不斷循環(huán)直到不足 k 位數(shù)字。
分割數(shù)組的方案數(shù)
【枚舉 + 前綴和】枚舉所有分割位置,找到其中的合法分割。
也可以不計算右邊,左邊×2如果大于總和等同于左邊大于右邊。
毯子覆蓋的最多白色磚塊數(shù)
【排序 + 雙指針】tiles按左端點(diǎn)l_i排序后,枚舉毯子的擺放位置,計算毯子能覆蓋多少塊瓷磚。毯子右端點(diǎn)放在一段瓷磚中間不如放在瓷磚右端點(diǎn),因此可以枚舉每段瓷磚的右端點(diǎn)來擺放毯子的右端點(diǎn)。雙指針,left需要滿足其指向的那段瓷磚的右端點(diǎn)被毯子覆蓋,設(shè)毯子右端點(diǎn)在瓷磚段i上,則毯子左端點(diǎn)是tiles[i] [i] - carpetLen + 1,left需要滿足tiles[left] [1] ≥tiles[i] [1]?carpetLen+1。如果毯子左端點(diǎn)在tiles[left]內(nèi)部,覆蓋的瓷磚數(shù)還需要額外減去這段瓷磚沒被覆蓋的部分,即減去(tiles[i] [1]?carpetLen+1) - tiles[left] [0]。
最大波動的子字符串
【DP】最大波動值只有s中兩種字符決定,但不確定是哪兩種,所以可以枚舉這兩種字符的所有可能值,從26個小寫字母中選兩個一共A(26,2) = 26*25 = 650種組合。將出現(xiàn)最多的字符視為1,出現(xiàn)最少的字符視為-1,其余字符視為0,本題就類似 最大子數(shù)組和問題了。ab必須都出現(xiàn)在子串中,用diff記錄ab出現(xiàn)次數(shù)之差,初始值為0,用diffwithb記錄包含b的a和b出現(xiàn)次數(shù)之差,初始為-∞。遍歷s,遇到a,diff和diffwithb都加以,遇到b,diff - 1,diffwithb = max(0, diff)。ans = max(diffwithb),s只有一種字符則ans=0。注:遍歷s的時候可以把s[i]當(dāng)作a或b,減少枚舉次數(shù)。