1. 程式人生 > >Leetcode 502.IPO

Leetcode 502.IPO

公司 util 方式 sub tro pro 完成後 添加 pub

IPO

假設 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。

註意:

  1. 假設所有輸入數字都是非負整數。
  2. 表示利潤和資本的數組的長度不超過 50000。
  3. 答案保證在 32 位有符號整數範圍內。

兩個priorityQueue,一個capital升序排列,一個profit降序排列,用這兩個找到滿足當前W的最大profit

 1 import java.util.PriorityQueue;
 2 
 3 public class Solution {
 4     public int findMaximizedCapital(int k, int W, int[] Profits, int[] Capital) {
 5         PriorityQueue<int[]> pqCap = new PriorityQueue<>((a, b) -> (a[0] - b[0]));
 6         PriorityQueue<int[]> pqPro = new
PriorityQueue<>((a, b) -> (b[1] - a[1])); 7 for (int i = 0; i < Profits.length; i++) { 8 pqCap.add(new int[] {Capital[i], Profits[i]}); 9 } 10 for (int i = 0; i < k; i++) { 11 while (!pqCap.isEmpty() && pqCap.peek()[0] <= W) { 12 pqPro.add(pqCap.poll()); 13 } 14 if (pqPro.isEmpty()) { 15 break; 16 } 17 W += pqPro.poll()[1]; 18 } 19 return W; 20 } 21 }

Leetcode 502.IPO