-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsolution.java
More file actions
77 lines (71 loc) · 1.95 KB
/
Copy pathsolution.java
File metadata and controls
77 lines (71 loc) · 1.95 KB
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// 621. Task Scheduler
// https://leetcode.com/problems/task-scheduler/
// Medium | Java | Accepted 2025-12-04
// Runtime 54 ms | Memory 48.1 MB
class Solution {
class Task implements Comparable<Task>
{
public int freq;
public char task;
public Task(int freq, char task)
{
this.freq = freq;
this.task = task;
}
public int compareTo(Task other) {
return Integer.compare(this.freq, other.freq);
}
public String toString()
{
return freq + " " + task;
}
}
class Cooling{
int timeReady;
Task task;
public Cooling(int t, Task task)
{
timeReady = t;
this.task = task;
}
}
public int leastInterval(char[] tasks, int n) {
PriorityQueue<Task> queue = new PriorityQueue<>(Collections.reverseOrder());
Map<Character, Integer> map = new HashMap<>();
for(int i = 0; i<tasks.length; i++)
{
if(!map.containsKey(tasks[i]))
{
map.put(tasks[i], 1);
}
else
{
map.put(tasks[i], map.get(tasks[i])+1);
}
}
for(char key : map.keySet())
{
queue.add(new Task(map.get(key), key));
}
int time = 0;
Queue<Cooling> cooldownQueue = new LinkedList<>();
while(!queue.isEmpty() || !cooldownQueue.isEmpty())
{
while(!cooldownQueue.isEmpty() && cooldownQueue.peek().timeReady <= time)
{
queue.add(cooldownQueue.poll().task);
}
if(!queue.isEmpty())
{
Task temp = queue.poll();
temp.freq--;
if(temp.freq!=0)
{
cooldownQueue.add(new Cooling(time+n+1, temp));
}
}
time++;
}
return time;
}
}