在C ++中构建模块的最短时间
假设我们有一个块列表,如果我们有blocks[i]=t,这意味着第i个块需要t单位时间来构建。一个街区只能由一个工人建造。单身工人可以分成两个工人,也可以建一个街区然后回家。这两个决定需要一些时间。将一个工人拆分为两个工人的时间成本称为“拆分”。
因此,如果输入像是blocks[[1,2],并且split=5,那么输出将是7,因为我们可以将worker分成5个时间单位的2个worker,然后将每个worker分配给一个block,因此成本是5+最大值1和2=7。
为了解决这个问题,我们将遵循以下步骤-
定义一个优先级队列pq
对于初始化i:=0,当i<块大小时,更新(将i增加1),执行-
将块[i]插入pq
当pq>1的大小时-
从pq中删除元素
x:=pq的顶部元素
从pq中删除元素
将split+x插入pq
返回pq的top元素
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int minBuildTime(vector<int>& blocks, int split) {
priority_queue<int, vector<int>, greater<int> > pq;
for (int i = 0; i < blocks.size(); i++)
pq.push(blocks[i]);
while (pq.size() > 1) {
pq.pop();
int x = pq.top();
pq.pop();
pq.push(split + x);
}
return pq.top();
}
};
main(){
Solution ob;
vector<int> v = {1,2};
cout << (ob.minBuildTime(v, 5));
}输入值
{1,2}, 5输出结果
7
热门推荐
10 好友搞笑留言祝福语简短
11 基金赚钱祝福语简短英文
12 八一祝福语简短情话句子
13 对同事简短生日祝福语
14 古风祝福语唯美简短亲情
15 女性的生日祝福语简短
16 花篮考学祝福语大全简短
17 中考物理加油祝福语简短
18 小爱心卡片祝福语简短