题目链接
思路:快排 + 优先队列(大根堆)
class Solution {
public int findMaximizedCapital(int k, int w, int[] profits, int[] capital) {
int n = profits.length;
int[][] arr = new int[n][2];
for(int i = 0; i < n;i++){
arr[i][0] = profits[i];//存利润
arr[i][1] = capital[i];//存资本
}
Arrays.sort(arr,(a,b) -> a[1]-b[1]);//按照资本排序 从小到大
int cur = 0;
PriorityQueue<Integer> pq = new PriorityQueue<>( (a,b) -> b-a);//大根堆
for(int i = 0; i < k;i++){
while(cur < n && arr[cur][1] <= w ){//所需要的资本小于等于现在的总资本
pq.add(arr[cur][0]);//将利润加进去
cur++;
}
if(!pq.isEmpty()){
w += pq.poll();//弹出第一个元素 pq就是一个大根堆
}else{
break;//资金不够了,一个羡慕都启动不了了
}
}
return w;
}
}