復(fù)盤|第307場周賽
贏得比賽需要的最少訓(xùn)練時(shí)長
【貪心 + 模擬】加自己的精力和經(jīng)驗(yàn),補(bǔ)到剛好超過對手即可。
最大回文數(shù)字
【貪心】先構(gòu)造左半部分,最后填充一個(gè)鏡像。從9枚舉到1,判斷是否能填0,另判斷正中間能否再填一個(gè)字符。
感染二叉樹需要的總時(shí)間
【DFS + BFS】DFS求出start的位置和每個(gè)點(diǎn)的父節(jié)點(diǎn),然后用BFS求答案。
找出數(shù)組的第 K 大和
【堆】記nums中所有非負(fù)數(shù)的和為sum。任意一個(gè)子序列的和,都等價(jià)于從sum中減去某些非負(fù)數(shù)/加上某些負(fù)數(shù)得到。將nums所有數(shù)取絕對值,這樣可以統(tǒng)一成從sum中減去某些數(shù)。將nums所有數(shù)取絕對值后排序,然后用最大堆來按照從小到大的順序取出sum要減去的子序列。
【二分 + 搜索】所有元素取絕對值,然后排序。二分子序列和,記作limt,統(tǒng)計(jì)元素和s不超過limt的子序列個(gè)數(shù)cnt。我們可以寫一個(gè)簡單的搜索,從小到大考慮每個(gè)numsi選或者不選,如果遇到cnt≥k-1或者s+nums[i]>limit的情況就立刻返回。用sum減去二分得到的值就是答案。