class Solution:
def getOrder(self, tasks: List[List[int]]) -> List[int]:
q, ans = [], []
for i, task in enumerate(tasks):
task.append(i)
tasks = sorted(tasks, key=lambda x: (x[0], x[2]))
# 当前时间戳 下一个待执行的任务下标
timestamp, ptr = 0, 0
for i in range(len(tasks)):
# 如果没有可以执行的任务,直接快进
if not q:
timestamp = max(timestamp, tasks[ptr][0])
# 将所有小于等于时间戳的任务放入优先队列
while ptr < len(tasks) and tasks[ptr][0] <= timestamp:
heapq.heappush(q, (tasks[ptr][1], tasks[ptr][2]))
ptr += 1
processTime, idx = heapq.heappop(q)
timestamp += processTime
ans.append(idx)
return ans
10-10
3146
09-27
456