File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import java .util .*;
2+ class Solution {
3+
4+ class Node {
5+ String name ;
6+ int time ;
7+ int playtime ;
8+ public Node (String name , int time , int playtime ) {
9+ this .name = name ;
10+ this .time = time ;
11+ this .playtime = playtime ;
12+ }
13+ }
14+
15+ public String [] solution (String [][] plans ) {
16+ String [] answer = new String [plans .length ];
17+ PriorityQueue <Node > pq = new PriorityQueue <>((a ,b ) -> a .time - b .time );
18+ Stack <Node > stack = new Stack <>();
19+ for (String [] str : plans ) {
20+ String [] s = str [1 ].split (":" );
21+ int time = Integer .parseInt (s [0 ]) * 60 + Integer .parseInt (s [1 ]);
22+ int playtime = Integer .parseInt (str [2 ]);
23+ pq .offer (new Node (str [0 ],time ,playtime ));
24+ }
25+
26+ Node n = pq .poll ();
27+ int now = n .time ;
28+ int idx = 0 ;
29+
30+
31+ while (true ) {
32+ if (!pq .isEmpty () && now + n .playtime > pq .peek ().time ) {
33+ stack .push (new Node (n .name , n .time ,
34+ now + n .playtime - pq .peek ().time ));
35+ now = pq .peek ().time ;
36+ n = pq .poll ();
37+ } else {
38+ answer [idx ++] = n .name ;
39+ now += n .playtime ;
40+ if (!pq .isEmpty () && now == pq .peek ().time ) {
41+ n = pq .poll ();
42+ } else if (!stack .isEmpty ()) {
43+ n = stack .pop ();
44+ } else if (!pq .isEmpty ()) {
45+ n = pq .poll ();
46+ now = n .time ;
47+ } else {
48+ break ;
49+ }
50+ }
51+
52+ }
53+ return answer ;
54+ }
55+ }
You can’t perform that action at this time.
0 commit comments