力扣周赛253题解
吐槽:大家都挺能卷的,打不过,打不过…
T1. 检查字符串是否为数组前缀
暴力即可:
1 | class Solution { |
T2.移除石子使总数最小
贪心,每次选择石子数目最多的石子堆执行操作,用大根堆维护,时间复杂度为$O(klog(n))$。
1 | class Solution { |
T3.使字符串平衡的最小交换次数
计算该字符串的balance,由于’[‘和’]’的数目相同,因此剩下的失配的也一定相同。
剩下的适配的子序列可以写成如下形式:
balance个]后面balance个[
对于每次交换,实际上就是把[变成],把]变成[,显然答案为$\lceil\frac{balance}{2}\rceil$。
1 | class Solution { |
T4. 找出到每个位置为止最长的有效障碍赛跑路线
题意就是对于每个$i$,求以$a_{i}$结尾的最长非递减上升子序列的长度。
只需要把经典的非递减上升子序列的求法中二分INF改成二分$a_{i}+1$即可。时间复杂度为$O(nlog(n))$。
1 | const int INF = 1e9+10; |