LeetCode 210: Расписание занятий II

Описание названия : Теперь у вас есть общее количество курсов на выбор, записанное как от 0 до numCourses - 1. Вам дан массив предварительных условий, где предварительные условия[i] = [ai, bi], что означает, что вы должны пройти bi перед тем, как пройти курс ai.

Например, если вы хотите изучить курс 0, вам нужно сначала пройти курс 1, мы используем совпадение для представления: [0,1].
Возвращает последовательность исследований, которые вы разместили, чтобы пройти все курсы. Правильных заказов может быть несколько, нужно просто вернуть любой. Возвращает пустой массив, если невозможно пройти все курсы.

Пример :
Ввод: numCourses = 2, предпосылки = [[1,0]]
Вывод: [0,1]
Объяснение: Всего имеется 2 курса. Чтобы изучить Урок 1, вам необходимо сначала пройти Урок 0. Таким образом, правильный порядок классов — [0,1].

Решение :
этот вопрос почти такой же, как Leetcode 207. Расписание занятий. Если вы делали это в прошлом, просто измените возвращаемое значение в вашем коде с True/False на непустой массив/пустой массив.

class Solution:
    def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]:
        from collections import defaultdict
        from collections import deque#队列
         # 入度数组(列表,保存所有课程的依赖课程总数)
        in_degree_list = [0]*numCourses
        # 关系表,对应图中的邻接边(字典,保存所有课程与依赖课程的关系)
        #defaultdict(list),会构建一个默认value为list的字典
        relation_dict = defaultdict(list)
        for i in prerequisites:
            in_degree_list[i[0]] += 1
            #添加依赖它的后续课程
            #key为i[1],i[0]为value加到value列表中
            relation_dict[i[1]].append(i[0])
        queue = deque()
        for i in range(len(in_degree_list)):
            if in_degree_list[i] == 0:
                queue.append(i)
        ##准备工作完成
        ## 此时relations_list: {0: [3], 1: [3, 4], 2: [4], 3: [5], 4: [5]}
        ## queue: [0, 1, 2]        
        ##经典bfs 模版
        result = []
        while queue:
            current_zero_degree = queue.popleft()
            result.append(current_zero_degree)
            numCourses = numCourses - 1
            related_courses = relation_dict[current_zero_degree]
            if related_courses:
                for i in related_courses:
                    in_degree_list[i]-=1
                    if in_degree_list[i] == 0:
                        queue.append(i)
        return result if numCourses==0 else []

Supongo que te gusta

Origin blog.csdn.net/Rolandxxx/article/details/128865044
Recomendado
Clasificación