每日一题:857. 雇佣 K 名工人的最低成本
题意
有 n 名工人。 给定两个数组 quality 和 wage ,其中,quality[i] 表示第 i 名工人的工作质量,其最低期望工资为 wage[i] 。
现在我们想雇佣 k 名工人组成一个工资组。在雇佣 一组 k 名工人时,我们必须按照下述规则向他们支付工资:
对工资组中的每名工人,应当按其工作质量与同组其他工人的工作质量的比例来支付工资。
工资组中的每名工人至少应当得到他们的最低期望工资。
给定整数 k ,返回 组成满足上述条件的付费群体所需的最小金额 。在实际答案的 10-5 以内的答案将被接受。。
示例 1:
输入: quality = [10,20,5], wage = [70,50,30], k = 2
输出: 105.00000
解释: 我们向 0 号工人支付 70,向 2 号工人支付 35。
示例 2:
输入: quality = [3,1,10,10,1], wage = [4,8,2,2,7], k = 3
输出: 30.66667
解释: 我们向 0 号工人支付 4,向 2 号和 3 号分别支付 13.33333。
提示:
n == quality.length == wage.length
1 <= k <= n <= 104
1 <= quality[i], wage[i] <= 104
题解
class Solution {
public double mincostToHireWorkers(int[] quality, int[] wage, int k) {
int n = quality.length;
double[][] rec = new double[n][2];
for(int i=0;i<n;i++){
rec[i] = new double[]{(double)wage[i]/(double)quality[i],quality[i]};
}
Arrays.sort(rec,(a,b)->Double.compare(a[0],b[0]));
PriorityQueue<Double>queue = new PriorityQueue<>();
int num=0; //记录总质量数
double res=Double.MAX_VALUE,t;
for(int i=0;i<n;i++){
queue.offer(-rec[i][1]);
num+=rec[i][1];
t = queue.size();
if(t>k){
num+=queue.poll();
t--;
}
if(t==k){
res = Math.min(res,num*rec[i][0]);
}
}
return res;
}
}

相关推荐
leetcode每日一题在哪-interviewalgorithms:面试算法
leetcode每日一题在哪2020年问题:找到重复的号码#goesthroughandmakesthe#Time:O(n)#Space:O(1)deffindDuplicate(self,nums:
【每日一题】洛谷 P1082(扩展欧几里得定理)
今日的每日一题是洛谷P1082,题目要求解决一个同余方程 \( a \times x \equiv 1 \mod b \) 的最小正整数解。这道题目实际上是数论中的经典问题,它与扩展欧几里得定理密切相
BC857B三极管PDF
RthJS ≤ 60 K/W。
煤矿机电四季度每日一题.doc
"煤矿机电四季度每日一题.doc"这篇文档主要涵盖了煤矿机电领域的多项知识点,包括井下供电系统保护、电气设备的管理、防爆标准、电路理论以及电机的接线方式等内容。以下是对这些知识点的详细解释:1
TI-OPA857.pdf
下面是对 OPA857 型号的详细介绍:特性OPA857 型号具有以下特性:* 内部中级基准电压* 伪差分输出电压* 宽动态范围* 闭环互阻抗带宽高达 125MHz(5kΩ 互阻抗增益,1.5pF 外部寄生电容



