题不难,不属于hard,应该算中,贪心策略很符合人的思维,就是在能够做的项目里选择利润最大的去做,没做一次重新更新能做的项目,再去选,这里用了一个大根堆和一个小根堆,
class Solution {
public int findMaximizedCapital(int k, int W, int[] Profits, int[] Capital) {
int res=0;
//定义小根堆和大根堆的比较器
//小根堆
PriorityQueue<Node> minheap=new PriorityQueue( new Comparator<Node>(){
public int compare(Node node1,Node node2){
return node1.cost-node2.cost;
}
}
);
//大根堆的
PriorityQueue<Node> maxheap=new PriorityQueue(
new Comparator<Node>(){
public int compare(Node node1,Node node2){
return node2.profit-node1.profit;
}
}
);
//构造小根堆
for(int i=0;i<Profits.length;i++){
Node node=new Node(Capital[i],Profits[i]);
minheap.add(node);
}
//每做一次都要从小根堆中可以解锁的项目
for(int i=0;i<k;i++){
//解锁
while(!minheap.isEmpty()&&minheap.peek().cost<=W){
maxheap.add(minheap.poll());
}
//从大根堆选择最大利益的项目做一次
if(maxheap.isEmpty()){
return W;
}
Node n=maxheap.poll();
W=W+n.profit;
}
return W;
}
public static class Node{
int cost;
int profit;
public Node(int cost,int profit){
this.cost=cost;
this.profit=profit;
}
}
}