题目:原题链接(中等)

标签:堆、贪心算法、排序

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( K l o g N ) O(KlogN) O(KlogN) O ( N ) O(N) O(N) 128ms (25.96%)
Ans 2 (Python)
Ans 3 (Python)

解法一(堆):

class Solution:
    def findMaximizedCapital(self, k: int, W: int, Profits: List[int], Capital: List[int]) -> int:
        size = len(Profits)

        # 依据成本排序项目
        lst = [(- Profits[i], Capital[i]) for i in range(size)]
        lst.sort(key=lambda x: x[1])

        i = 0  # 当前准备添加的项目
        heap = []  # 可完成的项目堆(项目收益最大值优先)

        # 贪心选择最优项目
        for _ in range(k):
            # 将资金满足的项目添加到列表
            while i < size and lst[i][1] <= W:
                heapq.heappush(heap, lst[i])
                i += 1

            if heap:
                # 选择当前收益最高的项目
                w, c = heapq.heappop(heap)
                W += -w
            else:
                return W  # 如果没有可以选择的项目则返回当前的资本

        return W