- 题目链接 502. IPO
- 题目意思
- 我们有初始资本 w,让我们最多进行k次交易,问最多能得到多少资本。交易的最小资本为Capital,收益为Profits。
- 题目解答
- 由于能进行交易的次数是有限的,所以我们尽量去做收益最大的项目,所以用最大队列max保存获得的收益,做项目时取最大值就行。我们每进行一个项目,资本就会增加,交易就会增多,用最小队列min保存需要资本。
public int findMaximizedCapital(int k, int W, int[] Profits, int[] Capital) {
Queue<int[]> max = new PriorityQueue<>((a,b) -> b[0] - a[0]);
Queue<int[]> min = new PriorityQueue<>((a,b) -> a[1] - b[1]);
for (int i = 0; i < Profits.length; i++) {
min.offer(new int[]{Profits[i], Capital[i]});
}
for (int i = 0; i < k; i++) {
while (!min.isEmpty() && min.peek()[1] <= W) {
max.offer(min.poll());
}
if (max.isEmpty()) break;
W += max.poll()[0];
}
return W;
}