• 第九周 Leetcode 502. IPO (HARD)


    Leetcode 502

    一个公司 目前有资产W 可以选择实现K个项目,每个项目要求公司当前有一定的资产,且每个项目可以使公司的总资产增加一个非负数。

    项目数50000

    设计一个优先队列,对于当前状态,队列中存放所有需要资产小于等于当前W的项目,队头为利润最大的项目,每次选择一个项目后,由于资产可能增加,尝试向队列中增加新的项目。

    复杂度O(nlogn)

    代码很简单。

    struct sub
    {
     int pro;int cap;
    };
    struct cmp2
    {
     bool operator ()(const sub &a,const sub &b)
     {
     return a.pro<b.pro;
     }
    };
    vector<sub>ss;
    bool cmp1(sub a,sub b)
    {
     return a.cap<b.cap;
    }
    priority_queue<sub,vector<sub>,cmp2>q;
    class Solution {
    public:
        int findMaximizedCapital(int k, int W, vector<int>& Profits, vector<int>& Capital) {
            ss.resize(Profits.size());
            while(!q.empty())q.pop();
            for(int i=0;i<Profits.size();i++)
            {
    		
            	ss[i].pro=Profits[i];ss[i].cap=Capital[i];
            }
            sort(&ss[0],&ss[0]+(int)ss.size(),cmp1);
         int i=0;
         bool flag=true;
         while(flag&&k>0)
         {
    	 flag=false;
         while(i<ss.size()&&ss[i].cap<=W)
         	{
    		 q.push(ss[i]);i++;
    		}
         if((!q.empty())&&q.top().pro>0){flag=true;W+=q.top().pro;q.pop();k--;}
        }
         return W;
        }
    };
    

      

  • 相关阅读:
    Android 中的 Service 全面总结
    数据库事务
    ADB server didn't ACK
    Eclipse中10个最有用的快捷键组合
    IoC框架
    Wifi相关的操作
    Hibernate generator小结
    不朽的青春
    JSCPC 2020 摸鱼记
    CCPC 2020 秦皇岛站 H题
  • 原文地址:https://www.cnblogs.com/heisenberg-/p/6735388.html
Copyright © 2020-2023  润新知