贪心

方法一贪心

很直观的贪心问题,每一次抉择我们需要选取当前可以做的利润最大的项目。

参考代码

  1. class Solution {
  2. public int findMaximizedCapital(int k, int w, int[] profits, int[] capital) {
  3. // 资本
  4. PriorityQueue<Integer> capitalQueue = new PriorityQueue<>((o1,o2)->capital[o1] - capital[o2] );
  5. // 利润
  6. PriorityQueue<Integer> profitsQueue = new PriorityQueue<>((o1,o2)->profits[o2] - profits[o1]);
  7. for(int i=0;i<capital.length;i++){
  8. capitalQueue.add(i);
  9. }
  10. for(int i=0;i<k;i++){
  11. while(!capitalQueue.isEmpty() && capital[capitalQueue.peek()] <= w){
  12. profitsQueue.add(capitalQueue.poll());
  13. }
  14. if(profitsQueue.isEmpty()){
  15. break;
  16. }
  17. w += profits[profitsQueue.poll()];
  18. }
  19. return w;
  20. }
  21. }

复杂度分析

时间复杂度O((n+k)logn)
空间复杂度O(n)