一つ、タイトル説明
あるNエンジニアは、n及び二つの配列に1から番号:速度[i]と効率[i]は、それぞれi番目のエンジニアのための速度及び効率を表し、速度と効率を、。答えは膨大な数とすることができるので、ほとんどのk個のエンジニアで構成チームの最高のパフォーマンスを返し、このモジュロ10 ^ 9 + 7を返します。
チームのパフォーマンスは彼らのエンジニアの中で最小の効率を乗じた彼らのエンジニアの速度の合計です。
输入:n = 6, speed = [2,10,3,1,5,8], efficiency = [5,4,3,9,7,2], k = 2
输出:60
解释:
我们选择工程师 2(speed=10 且 efficiency=4)和工程师 5(speed=5 且 efficiency=7)。
他们的团队表现值为 performance = (10 + 5) * min(4, 7) = 60 。
質問の意味:場合は同等の効率、スピード、明らかに、より良いの大きいスキームの2つのソリューション。各プログラムの最適な効率を得るどのように迅速に問題に変身。
アルゴリズム
- 効率Eに従って降順でみんな。
- 種の配列にk個の最大速度を選択します。
public int maxPerformance(int n, int[] speed, int[] efficiency, int k) {
int[][] pair = new int[n][2];
for (int i = 0; i < n; i++) {
pair[i][0] = speed[i];
pair[i][1] = efficiency[i];
}
Arrays.sort(pair, (e1, e2) -> e2[1] - e1[1]);
PriorityQueue<Integer> pQ = new PriorityQueue<>();
long max = 0, sd = 0;
for (int i = 0; i < n; i++) {
pQ.add(pair[i][0]);
sd += pair[i][0];
if (pQ.size() > k) {
sd -= pQ.poll();
}
max = Math.max(max, sd * pair[i][1]);
}
return (int)(max % ((int)1e9 + 7));
}
複雑性分析
- 時間計算: 、
- 宇宙の複雑さ: 、