文章目錄
- 😉毛遂自薦
- 🌝題目
- ?解題思路
- 🔥代碼
- 💖最后
😉毛遂自薦
毛遂自薦一下,給大家推薦一下自己的專欄😁,歡迎小伙伴們收藏關注😊
大廠面試題專欄
Java專欄
爬蟲專欄
更多專欄盡在主頁,點我😁!!!

🌝題目
力扣——>原題鏈接

?解題思路
因為題目說了,最多選K個,輸出最終可獲得的最多資本,那么我們需要在有限的次數獲取更多的資本,🔥即讓每一次獲取都盡可能地多
那么如何讓每一次獲取都盡可能地多呢?
答案就是:維護一個大根堆,每次獲取都去獲取頂部的元素也就是最大的資本,當然還有一個前提:就是獲取該專案的資本要小于等于當前的我們的資本,
🔥代碼
class Solution {
public int findMaximizedCapital(int k, int w, int[] profits, int[] capital) {
int n = profits.length;
//對啟動資本和純利潤建立二維陣列
int[][] nums = new int[n][2];
for (int i = 0; i < n; ++i) {
nums[i][0] = capital[i];
nums[i][1] = profits[i];
}
//利用排序,根據nums[0] 也就是啟動資本 進行升序排序
Arrays.sort(nums, (a, b) -> a[0] - b[0]);
//建立大根堆
PriorityQueue<Integer> queue = new PriorityQueue<>((x, y) -> y - x);
int index = 0;
//k次獲取
for (int i = 0; i < k; ++i) {
//如果當前的啟動資本小于等于則代表是我們可以獲取的,那么把他對應的利潤加入到堆中去
while (index < n && nums[index][0] <= w) {
queue.add(nums[index][1]);
index += 1;
}
//當堆不為空才去poll元素
if (!queue.isEmpty()) {
//poll回傳堆頂元素也就是可獲取的最大利潤,加入到w中
w += queue.poll();
} else {
break;
}
}
return w;
}
}
💖最后
我是 Code皮皮蝦,一個熱愛分享知識的 皮皮蝦愛好者,未來的日子里會不斷更新出對大家有益的博文,期待大家的關注!!!
創作不易,如果這篇博文對各位有幫助,希望各位小伙伴可以一鍵三連哦!,感謝支持,我們下次再見~~~

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/298649.html
標籤:java
上一篇:淺析Java常量池
