zoukankan      html  css  js  c++  java
  • leetcode 502 IPO

    leetcode 502 IPO

    假设 力扣(LeetCode)即将开始其 IPO。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 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 位有符号整数范围内。

    solution 1

     public class Item  {
            int Profits, Captial;
            public Item(int Pro, int Cap){
                this.Profits = Pro;
                this.Captial = Cap;
    
            }
        }
        public int findMaximizedCapital(int k, int W, int[] Profits, int[] Capital) {
    
            List<Item> items = new ArrayList<>();
            for(int i = 0; i < Profits.length; i++){
                items.add(new Item(Profits[i], Capital[i]));
            }
            Collections.sort(items, new Comparator<Item>() {
                @Override
                public int compare(Item o1, Item o2) {
                    if(o1.Profits > o2.Profits){
                        return 1;
                    }
                    else if(o1.Profits ==  o2.Profits){
                        return 0;
                    }
                    else{
                        return -1 ;
                    }
    
                }
            });
    
            while(  k > 0  ){
    //循环操作k次
    int i = items.size() -1 ; while(i>=0 && items.get(i).Captial > W){ i-=1; } if(i == -1){ break; } W += items.get(i).Profits; items.remove(i); k --; } return W ; }


    solution 2 

    import java.util.*;
    public class findMaximizedCapitalSolution {
        public class Item  {
            int Profits, Captial;
            public Item(int Pro, int Cap){
                this.Profits = Pro;
                this.Captial = Cap;
    
            }
        }
        class MinCaptialCompare implements Comparator<Item>{
            @Override
            public int compare(Item n1, Item n2){
                return n1.Captial - n2.Captial;
            }
        }
        class MaxProfitsCompare implements Comparator<Item>{
            @Override
            public int compare(Item n1, Item n2){
                return n2.Profits - n1.Profits;
            }
        }
    
        public int findMaximizedCapital(int k, int W, int[] Profits, int[] Capital) {
            PriorityQueue<Item>  min_heap = new PriorityQueue<>(new MinCaptialCompare());
            PriorityQueue<Item>  max_heap = new PriorityQueue<>(new MaxProfitsCompare());
            for(int i=0; i< Profits.length; i++){
                min_heap.add(new Item(Profits[i], Capital[i]));
            }
    
            for(int i=0; i<k;i++) {
                while (!min_heap.isEmpty() && min_heap.peek().Captial <= W) {
                    max_heap.add(min_heap.poll());
    
                }
                while (!max_heap.isEmpty()) {
                    W += max_heap.poll().Profits;
                    break;
                }
            }
            return W ;
    
        }
    
        public static  void main(String[] args){
            Scanner in = new Scanner(System.in);
            int k = Integer.parseInt(in.nextLine());
            int w = Integer.parseInt(in.nextLine());
            int[] Profits = Arrays.asList(in.nextLine().split(" ")).stream().mapToInt(Integer::parseInt).toArray();
            int[] Capital = Arrays.asList(in.nextLine().split(" ")).stream().mapToInt(Integer::parseInt).toArray();
            System.out.println(new findMaximizedCapitalSolution().findMaximizedCapital(k,w,Profits, Capital));
        }
    }
  • 相关阅读:
    Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
    用户画像——“打标签”
    python replace函数替换无效问题
    python向mysql插入数据一直报TypeError: must be real number,not str
    《亿级用户下的新浪微博平台架构》读后感
    【2-10】标准 2 维表问题
    【2-8】集合划分问题(给定要分成几个集合)
    【2-7】集合划分问题
    【2-6】排列的字典序问题
    【2-5】有重复元素的排列问题
  • 原文地址:https://www.cnblogs.com/xianbin7/p/11310083.html
Copyright © 2011-2022 走看看