zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 25

    Course Schedule I/II

    要点:

    • 有向图的topological sort,indegree方法需要图结构吗?需要,因为每层遍历是根据图得到连接关系更新indegree的
    • 图的dfs方法,虽然可以在recursion call之前或者之后更新visited,但是最好统一,这样不会出错。对这题,
      • visited在call外判断,call内更新,
      • recStk在call内开始进,call内结束出
      • 注意res在call内结束入(因为深层的排前面),不pop

    错误点:

    • 一个非常tricky的错误是对邻接点先检查visited,然后检查是否在recStk。实际上如果有环,肯定另一端已经visited了,这样不会返回false,正确的方法应该先检查是否在recStk里
    class Solution(object):
        def findOrder(self, numCourses, prerequisites):
            """
            :type numCourses: int
            :type prerequisites: List[List[int]]
            :rtype: List[int]
            """
            def dfs(graph, i, recStk, visited, res):
                visited[i]=True
                recStk.add(i)
                for p in graph[i]:
                    if p in recStk: 
                        return False
                    elif not visited[p]:
                        if not dfs(graph, p, recStk, visited, res):
                            return False
                
                recStk.remove(i)
                res.append(i)
                return True
            
            graph = [[] for i in range(numCourses)]
            for e in prerequisites:
                graph[e[0]].append(e[1])
            
            res = []
            recStk = set()
            visited = [False]*numCourses
            for p in range(numCourses):
                if not visited[p]:
                    if not dfs(graph, p, recStk, visited, res):
                        return []
            
            # res.reverse()
            return res
                
                        
    
  • 相关阅读:
    oracle 查询表空间
    oracle 创建表空间
    webservice SOA
    WCF初识
    win10远程桌面身份验证错误,要求的函数不受支持
    一台主机两台显示器实现方式学习
    实现Http Server学习
    lucene索引和查询文件系统存储
    java 大文件输入方式FileOutputStream
    tar
  • 原文地址:https://www.cnblogs.com/absolute/p/5678027.html
Copyright © 2011-2022 走看看