面试150 IPO

思路

首先,将每个项目的启动资本需求和对应的利润配对,组成一个二元组列表,并根据所需资本从小到大进行排序。这样可以确保在遍历项目列表时,能按所需资本的升序处理。接着,使用一个最大堆(通过在堆中存入利润的负值来实现)来维护当前资本下所有可选项目的利润。在每一轮(最多进行 k 轮)中,程序会将当前可承受的所有项目(即资本需求不超过当前拥有资本的项目)加入最大堆,然后从中选择利润最高的项目(堆顶元素),执行该项目并将其利润加到当前资本上。如果在某一轮没有任何可执行的项目,算法会提前退出。最终,返回选择最多 k 个项目后所能获得的最大资本。该算法通过贪心策略结合堆结构,兼顾了效率和最优选择。

python 复制代码
import heapq
from typing import List

class Solution:
    def findMaximizedCapital(self, k: int, w: int, profits: List[int], capital: List[int]) -> int:
        num_projects = len(profits)
        project_list = []
        
        # 将每个项目的资本需求和对应利润配对
        for i in range(num_projects):
            project_list.append([capital[i], profits[i]])
        
        # 按所需资本升序排序
        project_list.sort()
        
        max_profit_heap = []  # 最大堆,用于存储可选项目的利润(取负值实现最大堆)
        project_index = 0
        available_capital = w
        
        for _ in range(k):
            # 将当前资本可承受的项目加入最大堆
            while project_index < num_projects and project_list[project_index][0] <= available_capital:
                heapq.heappush(max_profit_heap, -project_list[project_index][1])
                project_index += 1
            
            if not max_profit_heap:
                break  # 没有可选项目,退出循环
            
            # 选择利润最高的项目
            max_profit = -heapq.heappop(max_profit_heap)
            available_capital += max_profit
        
        return available_capital
相关推荐
一叶飘零_sweeeet22 分钟前
2026 年 Java 面试必问:Spring AI 核心原理,90% 人答不全
java·面试·spring ai
逻辑驱动的ken1 小时前
Java高频面试考点场景题21
java·开发语言·面试·职场和发展·求职招聘
辛苦才能2 小时前
数据结构--排序--插入排序(C语言,重点排序面试和比赛都会考察)
c语言·数据结构·面试
穿条秋裤到处跑11 小时前
每日一道leetcode(2026.04.29):二维网格图中探测环
算法·leetcode·职场和发展
汉克老师12 小时前
GESP2025年3月认证C++五级( 第三部分编程题(1、平均分配))
c++·算法·贪心算法·排序·gesp5级·gesp五级
许彰午15 小时前
我手写了一个 Java 内存数据库(二):B+ 树的插入与分裂
java·开发语言·面试
Morwit17 小时前
QML组件之间的通信方案(暴露子组件)
c++·qt·职场和发展
qeen8717 小时前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
leoufung18 小时前
LeetCode 76:Minimum Window Substring 题解与滑动窗口思维详解
算法·leetcode·职场和发展
weisian15120 小时前
基础篇--概念原理-2-参数是什么?——从原理到实战,一篇讲透
面试·职场和发展·模型参数·7b和70b·参数=规则,不是原始数据