1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| public int jobScheduling(int[] startTime, int[] endTime, int[] profit) { convert(startTime,endTime,profit); PriorityQueue<int[]> pq=new PriorityQueue<>((a,b)->(a[0]-b[0])); int n=startTime.length; int max=0; for (int i = 0; i < n; i++) { int start=startTime[i]; int end=endTime[i]; int p=profit[i]; while(!pq.isEmpty() && pq.peek()[0]<=start){ max=Math.max(max,pq.poll()[1]); } pq.offer(new int[]{end,p+max}); } while(!pq.isEmpty()){ max=Math.max(max,pq.poll()[1]); } return max; }
private void convert(int[] startTime, int[] endTime, int[] profit){ List<int[]> list=new ArrayList<>(); int n=startTime.length; for (int i = 0; i < n; i++) { list.add(new int[]{startTime[i],endTime[i],profit[i]}); } Collections.sort(list,(a,b)->(a[0]-b[0])); for (int i = 0; i < n; i++) { int[] arr=list.get(i); startTime[i]=arr[0]; endTime[i]=arr[1]; profit[i]=arr[2]; } }
|