魔法师 (@Constanline) 在 Leetcode每日一题 —— 3013. 将数组分成最小总代价的子数组 II 中发帖
思路
比昨天预想的数组数量变化k以外,还多了距离(dist)的要求。
第一组没什么可说的,一定从第一个元素开始。
因为最后一组特殊(限制了第二组的起始位置),所以我们从后往前遍历最后一组的起始位置,这样就从它前面的dist个元素中选最小的k-2个就能满足要求。这正好可以用大小顶堆/有序集合来实现。
代码
class Solution {
private static class Num {
int loc;
int val;
public Num(int loc, int val) {
this.loc = loc;
this.val = val;
}
@Override
public boolean equals(Obj...