一、题目描述

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

给定若干个项目。对于每个项目 i,它都有一个纯利润 Pi,并且需要最小的资本 Ci 来启动相应的项目。最初,你有 W 资本。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。

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

二、示例

示例 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。

注意:

  • 假设所有输入数字都是非负整数。
  • 表示利润和资本的数组的长度不超过 50000。
  • 答案保证在 32 位有符号整数范围内。

三、分析

贪心算法:每次挑选出满足启动资金(capital)要求的各个项目中利润(profit)最大的那个。

数据结构方面:因为存在相同的capital值的可能,所以用multimap。但是multimap如果按照key值删除,那么将会删除所有相同key的数据,不满足题意,所以采用迭代器。
而且map的key值默认按照升序排列,可以减少运算量。

此外priority_queue自带排序功能

四、实现

class Solution {
public:  int findMaximizedCapital(int k, int W, vector<int>& Profits, vector<int>& Capitals) {multimap<int,int> map;for(int i = 0; i < Capitals.size(); ++i){map.insert(make_pair(Capitals[i],Profits[i]));}priority_queue<int> prique;while(k--){for(auto iter = map.begin(); iter != map.end(); iter++){//map的key自动按照升序排列if(iter->first <= W){prique.push(iter->second);//优先队列里面存的是available的利润值map.erase(iter);}else break;}if(prique.empty()) break;W += prique.top();//优先队列top出来的是最大的数.prique.pop();//此轮在队列中留下的数在下一轮继续available}return W;}
};

【LeetCode 502】IPO相关推荐

  1. 重复次数最多的 子串_每日算法系列【LeetCode 424】替换后的最长重复字符

    题目描述 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 示例1 输入: s = &quo ...

  2. 【LeetCode - 32】最长有效括号

    给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度. 示例 1: 输入:s = "(()" 输出:2 解释:最长有效括号子串是 " ...

  3. 【LeetCode题解】二叉树的遍历

    我准备开始一个新系列[LeetCode题解],用来记录刷题,顺便复习一下数据结构与算法. 1. 二叉树 二叉树(binary tree)是一种极为普遍的数据结构,树的每一个节点最多只有两个节点--左孩 ...

  4. 如何给柱状图柱子添加阴影_【LeetCode日记】84. 柱状图中最大的矩形

    题目描述 ` 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是柱状图的示例,其中每个柱子的宽度为 1,给 ...

  5. 【LeetCode笔记】253. 会议室 II(Java、偏数学)

    文章目录 题目描述 思路 && 代码 计划里 hot 100 + 剑指Offer 的题目中唯一一道会员题,同时也是最后一道没写的题,刚好今天 leetcode 发了一天会员可以写上-简 ...

  6. 【LeetCode笔记】301. 删除无效的括号(Java、DFS、字符串)

    文章目录 题目描述 思路 && 代码 二刷 题目描述 [所有可能结果]-> [暴力DFS] 思路 && 代码 代码比较长,但是总体思路很清晰. 剪枝:舍弃左括号. ...

  7. 【LeetCode 总结】Leetcode 题型分类总结、索引与常用接口函数

    文章目录 零. Java 常用接口函数 一. 动态规划 二. 链表 三. 哈希表 四. 滑动窗口 五. 字符串 六. DFS.BFS 七. 二分法 八. 二叉树 九. 偏数学.过目不忘 and 原地算 ...

  8. 【LeetCode笔记】剑指 Offer 03. 数组中重复的数字(Java、哈希表、原地算法)

    文章目录 题目描述 思路 & 代码 二刷 题目描述 倒是和leetcode 287 寻找重复数很像..但是不能使用那道题的快慢指针法(也可能是我太菜了) 重点在于题干的描述[长度为 n 的数组 ...

  9. 【LeetCode笔记】53. 最大子序和(Java、动态规划)

    文章目录 题目描述 代码 & 思路 题目描述 经典题目了,多种解法(不过目前只学了一种,暴力不算) 代码 & 思路 这块基本上算是写给自己看的了..写得不好,如果想学这种方法最好还是去 ...

最新文章

  1. intel 汇编中断解释
  2. 飞鸽传书为我们提供了方便的聊天工具
  3. 发送邮件现在应用得最多的两种情况就是利用.NET自带的发送邮件和利用jmail组件来发送邮件。...
  4. 《C语言深度解剖》学习笔记之内存管理
  5. 打印出所有的 水仙花数 ,所谓 水仙花数 是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 水仙花数 ,因为153=1的三次方+5的三次方+3的三次方。...
  6. Python多重继承(一分钟读懂)
  7. lnk200无法解析的外部符号_语义解析
  8. Day21 linux安装RPM包
  9. Kaggle TMDB电影数据分析项目实战
  10. FOXIT PDF SDK 8.1 ALL Crack
  11. html阅读是什意思,HTML是什么意思?什么是HTML5?什么是H5? | 前端面试题
  12. 解决cherry pick提交报错问题
  13. 批处理图片尺寸修改成4的倍数
  14. 酷6 期待“化茧成蝶”
  15. ABeam Insight | 德硕智能制造系列(1):智能制造概览(上)
  16. 用电脑键盘打出常用特殊符号
  17. 文本和输入:复制和粘贴
  18. 微商必备6款软件!十分好用
  19. sql语句基础-提升
  20. 根据excel模板导出

热门文章

  1. 零压力学python_《零压力学Python》 之 第一章知识点归纳
  2. 字符串按单词逆序输出c 语言,字符串中的每个单词倒序输出问题
  3. php foreach方法,forEach方法怎么使用
  4. 小米4硬改教程_小米手环3美化/修改资源包教程(含加入二维码教程)
  5. gis影像格式img转为ecw_微图影像地图导出拼接大图的参数说明
  6. vue 使用fs_模仿vue-cli,手写一个脚手架
  7. 一种新的url定向技术-使用@与/?
  8. python的字符串的转义
  9. 自编码器参数是否需要相称呢
  10. 国睿驰120gb固态硬盘测试软件,系统盘首选 国睿驰120GB固态硬盘测试