当前位置: 首页 > article >正文

【数据结构-堆】【hard】力扣502. IPO

假设 力扣(LeetCode)即将开始 IPO 。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 k 个不同项目后得到最大总资本的方式。

给你 n 个项目。对于每个项目 i ,它都有一个纯利润 profits[i] ,和启动该项目需要的最小资本 capital[i] 。

最初,你的资本为 w 。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。

总而言之,从给定项目中选择 最多 k 个不同项目的列表,以 最大化最终资本 ,并输出最终可获得的最多资本。

答案保证在 32 位有符号整数范围内。

示例 1:
输入:k = 2, w = 0, profits = [1,2,3], capital = [0,1,1]
输出:4
解释:
由于你的初始资本为 0,你仅可以从 0 号项目开始。
在完成后,你将获得 1 的利润,你的总资本将变为 1。
此时你可以选择开始 1 号或 2 号项目。
由于你最多可以选择两个项目,所以你需要完成 2 号项目以获得最大的资本。
因此,输出最后最大化的资本,为 0 + 1 + 3 = 4。

示例 2:
输入:k = 3, w = 0, profits = [1,2,3], capital = [0,1,2]
输出:6

在这里插入图片描述
优先队列

class Solution {
public:
    int findMaximizedCapital(int k, int w, vector<int>& profits, vector<int>& capital) {
        int n = profits.size();
        priority_queue<int> p;
        
         vector<pair<int, int>> projects;
        for (int i = 0; i < n; ++i) {
            projects.push_back({capital[i], profits[i]});
        }
        
        sort(projects.begin(), projects.end());

        int i = 0;
        for(int j = 0; j < k; j++){
            while(i < n && w >= projects[i].first){
                p.push(projects[i].second);
                i++;
            }
            
            if (!p.empty()) {
                w += p.top();  
                p.pop();        
            }
        }
        return w;
    }
};

这道题我们可以用贪心的思想,当我们有w资本的时候,能完成某些项目的投资,那么由于我们投资的次数有限制,并且投资利润高的项目能使w更大以便能有投资更多项目的权限。那么我们在能投资的项目中,就选择利润最高的进行投资。

我们定义一个projects来对项目的要求资本进行排序,这样以便我们可以知道当我们有w资本的时候,可以投资哪些项目。接下来我们进行k次投资遍历,我们知道投资的项目后推入大根堆q中,堆顶就是我们所需要的能投资的最大利润项目,然后进行投资,利润加到w中。


http://www.kler.cn/a/511490.html

相关文章:

  • Django简介与虚拟环境安装Django
  • 通信协议之数据帧常用校验方法(奇偶校验、CRC校验)
  • 线上工单引发的思考:Spring Boot 中 @Autowired 与 @Resource 的区别
  • 项目实战--网页五子棋(游戏大厅)(3)
  • OA-CNN:用于 3D 语义分割的全自适应稀疏 CNN
  • Springboot Redisson 分布式锁、缓存、消息队列、布隆过滤器
  • 【opencv】第10章 角点检测
  • Kinova仿生机械臂Gen3搭载BOTA 力矩传感器SeneOne:彰显机器人触觉 AI 与六维力传感的融合力量
  • StarRocks 怎么让特定的SQL路由到FE master节点的
  • 推荐sdkman管理sdk和jdk
  • Java 基于 SpringBoot+Vue 的停车场管理系统(附源码,部署,文档)
  • 神经网络常见面试题
  • MySQL 主从复制原理及其工作过程的配置
  • Flowable 管理各业务流程:流程设计器 (获取流程模型 XML)、流程部署、启动流程、流程审批、流程挂起和激活、任务分配
  • 本地部署 Calcium 网页计算器并实现外部访问
  • MySQL数据库的数据文件保存在哪?MySQL数据存在哪里
  • efficient_pcm 函数
  • vue3+echarts+DataV实现省市县地图
  • 使用插件时的注意事项
  • 【Bluedroid】HFP连接流程源码分析(四)
  • Java中json的一点理解
  • 数据库管理语句分类
  • YOLOv10-1.1部分代码阅读笔记-utils.py
  • 青少年编程与数学 02-007 PostgreSQL数据库应用 06课题、数据库操作
  • GPT Notes 3.2.1.2 | 最强GPT解锁会员版无需登录无限制使用
  • 某讯一面,感觉问Redis的难度不是很大