假设 力扣(LeetCode)即将开始其 IPO。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 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 位有符号整数范围内。

思路:

方法一:按照利润排序,然后每次从前往后遍历找到第一个可以启动的项目加入答案,直到找到了k个为止。

class Solution {class node implements Comparable<node>{int profit,capital;public node(int profit,int capital) {this.profit=profit;this.capital=capital;}@Overridepublic int compareTo(node o) {// TODO 自动生成的方法存根if(profit==o.profit)return capital-o.capital;return o.profit-profit;}}public int findMaximizedCapital(int k, int W, int[] Profits, int[] Capital) {int ans=0,num=0;int n=Profits.length;node[] arr=new node[n];List<node> list=new ArrayList<>();if(n==0) return W;for(int i=0;i<n;i++)arr[i]=new node(Profits[i],Capital[i]);Arrays.parallelSort(arr);for(int i=0;i<n;i++)list.add(arr[i]);while(num<k) {boolean mark=false;for(int i=0;i<list.size();i++) {if(list.get(i).capital<=W) {num++;mark=true;W+=list.get(i).profit;list.remove(i);break;}}if(!mark) return W;}return W;}
}

方法二:大顶堆+小顶堆

我们对当前能启动的项目按照利润建立大顶堆,然后当前不能启动的项目按照所需资本建立小顶堆,然后在更新资本的过程中更新小顶堆和大顶堆即可。

class Solution {class node implements Comparable<node>{int profit,capital;public node(int profit,int capital) {this.profit=profit;this.capital=capital;}@Overridepublic int compareTo(node o) {// TODO 自动生成的方法存根if(profit==o.profit)return capital-o.capital;return o.profit-profit;}}class cmp implements Comparator<node>{@Overridepublic int compare(node o1, node o2) {// TODO 自动生成的方法存根if(o1.capital==o2.capital)return o2.profit-o1.profit;return o1.capital-o2.capital;}}public int findMaximizedCapital(int k, int W, int[] Profits, int[] Capital) {int ans=0,num=0;int n=Profits.length;node[] arr=new node[n];PriorityQueue<node>q1=new PriorityQueue<>();PriorityQueue<node>q2=new PriorityQueue<>(new cmp());if(n==0) return W;for(int i=0;i<n;i++) {if(Capital[i]<=W)q1.add(new node(Profits[i],Capital[i]));elseq2.add(new node(Profits[i],Capital[i]));}while(num<k && !q1.isEmpty()) {node now=q1.poll();W+=now.profit;while(!q2.isEmpty() && q2.peek().capital<=W)q1.add(q2.poll());num++;}return W;}
}

JAVA程序设计:IPO(LeetCode:502)相关推荐

  1. 《Java程序设计》第十一周学习总结

    20175334 <Java程序设计>第十一周学习总结 教材学习内容总结 第十三章 URL类 一个URL对象通常包含最基本的三部分信息:协议.地址.资源. URL对象调用 InputStr ...

  2. 20175320 2018-2019-2 《Java程序设计》第2周学习总结

    20175320 2018-2019-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第二章及第三章的内容.在这两章中介绍了Java编程中的基本数据类型与数组以及 ...

  3. 20145101《Java程序设计》第4周学习总结

    20145101<Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 继承:避免多个类间重复定义共同行为. 把相同代码提升为父类 运用extends关键字的子类会继承扩 ...

  4. java程序设计_Java程序设计:学习笔记(4-5)(未完工)

    声明: 本文内容基于"吉首大学软件学院-Java程序设计(Java面向对象程序设计)"网课与个人实践经验修改编写而成.本文属于Arcadia项目组成部分.若有错误或不足之处存在请联 ...

  5. 20155307 2016-2017-2 《Java程序设计》第10周学习总结

    20155307 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程:就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据 ...

  6. 20155204 2016-2017-2 《Java程序设计》第3周学习总结

    20155204 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 一个原始码中可以有多个类定义,但只能有一个公开类. 留心Scanner对于每一种类型的nex ...

  7. java课设推荐,《Java程序设计》课程设计报告推荐.docx

    <Java程序设计>课程设计报告推荐 <Java程序设计>课程设计报告2015-2016学年 第一学期设计题目整数进制转换学生姓名邹晓刚学 号0专业班级信管1303指导教师 姜 ...

  8. 计算机浙大网java网站,网络课程—非计算机专业JAVA程序设计语言

    <非计算机专业JAVA程序设计语言> 一.主要目标和主要内容: 该课程面向全校非计算机专业理工类本科生,是程序设计语言类必修的公共基础课之一.该课程的前导课程是<大学计算机基础> ...

  9. Java程序设计经典习题15道

    Java程序设计总复习题 1.编写一个Java程序在屏幕上输出"你好!".(p13,例1-1) //programme name Helloworld.java public cl ...

  10. java程序设计pdf下载_Java程序设计(迟立颖) PDF扫描版[21MB]

    Java程序设计由浅入深地介绍了Java的基础知识,并结合具体的实例重点阐述了Java面向对象的概念及其程序设计方法,还介绍了图形用户界面(GUI)等知识.全书共分11章,内容包括Java概述.Jav ...

最新文章

  1. Eclipse Jetty 9.4.15 发布,建议使用 JDK 12
  2. MyEclipse内存溢出问题
  3. 使用dynDNS+openSSH+putty突破公司防火墙
  4. 小说网站程序源码 自动采集 SEO优化
  5. Gentle.NET 使用文档
  6. neo4j的查询语法Cypher+python演示
  7. Web前端:javascript实现图片轮播
  8. 轻松学习理解ACL访问控制列表(转)
  9. STM32MP157实现串口接收数据上云-云数据库存储多设备数据界面显示实现
  10. mysql图书管理系统er图,图书管理系统er图.doc
  11. 基本函数依赖和候选键_给定一组字母表示的函数依赖集,怎样确定候选键?
  12. [笔记]阿里云物联网之业务服务端(java、php)接入阿里云平台
  13. 从传统金融变身科技公司后,2017年的平安交了这样一份答卷
  14. 光耦w314的各引脚图_单通道光耦ACPL-312U-500E设计,ACPL-W314-000E线路图
  15. c语言规定对于一个正常运行的c程序,下列叙述中正确的是,计算机二级C语言复习第*周...
  16. 北京通信展的精华,都在这里!(下)
  17. scp指令,进行服务器之间数据传输
  18. Pyhive安装(python连接有Kerberos的hive数据库)
  19. LeetCode使用指南
  20. Liunx 离线安装 JDK1.8 (超级详细版)

热门文章

  1. R语言方差齐性检验bartlett.test()和leveneTest()函数
  2. bazel 链接_学习使用bazel
  3. 计算机视觉领域的一区sci,计算机视觉和模式识别领域的SCI期刊
  4. 水深6到9米有鱼吗_【钓鱼技巧】秋季野钓是钓深水,还是浅水好?三招选择野钓的水深|野钓|浅水|浅水区|作钓...
  5. android安卓日程管理系统(含源码)
  6. 如何优雅的将DTO转化成BO
  7. Origin2017图片去除
  8. 防灾科技学院计算机好就业吗,防灾科技学院好就业吗?附防灾科技学院就业率最高的专业名单...
  9. “银发族”双十一元年:一觉醒来货到了家门口
  10. 重开technical blog