复盘|第307场周赛
赢得比赛需要的最少训练时长
【贪心 + 模拟】加自己的精力和经验,补到刚好超过对手即可。
最大回文数字
【贪心】先构造左半部分,最后填充一个镜像。从9枚举到1,判断是否能填0,另判断正中间能否再填一个字符。
感染二叉树需要的总时间
【DFS + BFS】DFS求出start的位置和每个点的父节点,然后用BFS求答案。
找出数组的第 K 大和
【堆】记nums中所有非负数的和为sum。任意一个子序列的和,都等价于从sum中减去某些非负数/加上某些负数得到。将nums所有数取绝对值,这样可以统一成从sum中减去某些数。将nums所有数取绝对值后排序,然后用最大堆来按照从小到大的顺序取出sum要减去的子序列。
【二分 + 搜索】所有元素取绝对值,然后排序。二分子序列和,记作limt,统计元素和s不超过limt的子序列个数cnt。我们可以写一个简单的搜索,从小到大考虑每个numsi选或者不选,如果遇到cnt≥k-1或者s+nums[i]>limit的情况就立刻返回。用sum减去二分得到的值就是答案。