復(fù)盤|第325場周賽
到目標(biāo)字符串的最短距離
【遍歷】遍歷每個(gè)words[i],如果它等于target,那么用min(|i-startIndex|,|n-i-startIndex|)更新答案的最小值。
每種字符至少取 K 個(gè)
【雙指針】取的字符是前綴+后綴,先從右往左遍歷找到最短的滿足要求的后綴。枚舉前綴長度的同時(shí),維護(hù)后綴長度。
禮盒的最大甜蜜度
【貪心 + 二分】由于隨著甜蜜度的增大,能選擇的糖果數(shù)量變小,有單調(diào)性,所以可以用二分答案來做。對(duì)price從小到大排序,二分答案d。最小的數(shù)x可以選,下一個(gè)可以選的數(shù)是第一個(gè)≥x+d的數(shù),依此類推。如果可以選的數(shù)<k,說明d取大了,否則說明d取小了,根據(jù)這一點(diǎn)來二分。 二分上界可以取(price[-1] - price[0]) // (k - 1) + 1。
好分區(qū)的數(shù)目
【01背包】逆向考慮壞分區(qū)的數(shù)目,定義f[i] [j]表示從前i個(gè)數(shù)中選擇若干元素,和為1的方案數(shù)。不選第i個(gè)數(shù):f[i] [j] = f[i-1] [j],選第i個(gè)數(shù):f[i] [j] = f[i - 1] [j - nums[i]]。