Leetcode 502.IPO
阿新 • • 發佈:2019-02-14
公司 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。
註意:
- 假設所有輸入數字都是非負整數。
- 表示利潤和資本的數組的長度不超過 50000。
- 答案保證在 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 = newPriorityQueue<>((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