ipo

154 阅读1分钟

ipo

使用两个heap解决

class Solution {
    public static class Node{
        public int p;
        public int c;
        public Node(int p,int c){
            this.p = p;
            this.c = c;
        }
    }
    public static class MinCostComparator implements Comparator<Node>{
        public int compare(Node n1,Node n2){
            return n1.c - n2.c;
        }
    }
    public static class MaxProComparator implements Comparator<Node>{
        public int compare(Node n1,Node n2){
            return n2.p - n1.p;
        }
    }
    public int findMaximizedCapital(int k, int W, int[] Profits, int[] Capital) {
        Node[] nodes = new Node[Profits.length];
        for(int i = 0;i < Profits.length;i++){
            nodes[i] = new Node(Profits[i],Capital[i]);
        }
        PriorityQueue<Node> minCost = new PriorityQueue<>(new MinCostComparator());
        PriorityQueue<Node> maxPro = new PriorityQueue<>(new MaxProComparator());
        for(int i = 0;i < nodes.length;i++){
            minCost.add(nodes[i]);
        }
        for(int i = 0;i < k;i++){
            while(!minCost.isEmpty() && minCost.peek().c <= W){
                maxPro.add(minCost.poll());
            }
            if(maxPro.isEmpty()){
                return W;
            }
            W += maxPro.poll().p;
        }
        return W;
    }
}
``