1383. Maximum Performance of a Team

Information

  • Diffculty: Hard

  • Created: 2020-03-15 11:56:38

  • Last Motified: 2020-03-15 11:56:38

  • Tags: Greedy, Sort

Intuition

We could first sort all the engineers by their efficiency. We need to know the maximum sum of speed we can get with the minimum efficiency for each efficiency. To achieve this, we need to use a heap and keep the maximum speed sum with the efficiency as minimum efficiency.

Solution

import heapq


class Solution:
    def maxPerformance(self, n: int, speed: List[int], efficiency: List[int], k: int) -> int:
        eff_heap = []
        for i in range(n):
            heapq.heappush(eff_heap, [-efficiency[i], i])

        max_performance = float('-inf')
        speed_heap = []
        s = 0
        while eff_heap:
            eff, i = heapq.heappop(eff_heap)
            eff = -eff
            s += speed[i]
            heapq.heappush(speed_heap, speed[i])
            if len(speed_heap) > k:
                tmp = heapq.heappop(speed_heap)
                s -= tmp
            max_performance = max(max_performance, s * eff)
        return max_performance % ((10 ** 9) + 7)