力扣周赛318题解
对数组执行操作
题意:略
题解:
- 直接按照题意模拟即可。
代码:
1 | class Solution { |
长度为 K 子数组中的最大和
简要题意:
对于一个长度为$n$的数组,求和最大的长度为$k$的不存在重复元素的子数组的和。
题解:
- 使用set和map维护长度为$k$的窗口
- 前缀和
代码:
1 | class Solution { |
雇佣 K 位工人的总代价
简要题意:
对于一个长度为$n$的序列,每次在前$m$个元素和后$m$个元素中选择最小的删除,求$k$次的和。
题解:
- 使用两个优先队列维护前$m$个元素和后$m$个元素
- 双指针来拓展这两个优先队列
代码:
1 |
|
最小移动总距离
简要题意:
$n$个坏掉的机器人, 第$i$个机器人的位置在$p_{i}$,有$m$个修理厂,第$i$个的修理厂位置在$x_{i}$,最多能修理$y_{i}$个机器人。机器人从$x$移动到$y$需要的距离是$|x - y|$。
求修复好所有机器人最小的移动距离。
题解:
将机器人和修理厂按位置排序,一个修理厂一定是修复连续的一段机器人
动态规划,考虑$dp[i][j]$表示前$i$个修理厂修复了前$j$个机器人最小的移动距离,则有
其中$cost[i][j]$表示第$j$个机器人移动到第$i$个修理厂需要的距离。
- 时间复杂度$O(n ^ 3)$
代码:
1 | class Solution { |