first sort the capital (use PriorityQueue, save capital and profit info, sort by asc for capital),
find the smallest boundary <= w, then you can start a new project,
but you should choose the maximum profits of projects you can start
so PriorityQueue sort with profit by desc is the rescue.
time: O(nlogn)
space:O(n)
classSolution {publicintfindMaximizedCapital(int k,int w,int[] profits,int[] capital) {// if capital[i] <= w, minimum capital , can start this project, get profits[i]// c = [0, 1, 1], w = 0, get profit[0] = 1, w+= profit[0]// c = [0, 1, 1], w = 1, profits = [1,2,3] => so should sort profits descPriorityQueue<int[]> cap =newPriorityQueue<>((a, b) -> a[0] - b[0]);PriorityQueue<Integer> pro =newPriorityQueue<>((a, b) -> b - a);for (int i =0; i <capital.length; i++) {cap.offer(newint[]{capital[i], profits[i]}); }for (int i =0; i < k; i++) {while (!cap.isEmpty() && w >=cap.peek()[0]) {pro.offer(cap.poll()[1]); }if (pro.isEmpty()) {break; } w +=pro.poll(); }return w; }}