zoukankan      html  css  js  c++  java
  • 第九周 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;
        }
    };
    

      

  • 相关阅读:
    第二次编程作业总结
    structs get 方法乱码问题
    网址记录
    尸体解剖报告
    最后冲刺
    回答自己的提问——对自己最大的反馈
    构建之法13-17章读后感
    典型场景
    对其他各团队的评价
    用户调研
  • 原文地址:https://www.cnblogs.com/heisenberg-/p/6735388.html
Copyright © 2011-2022 走看看