There are a total of n courses you have to take, labeled from 0 to n-1.

Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]

Given the total number of courses and a list of prerequisite pairs, is it possible for you to finish all courses?

Example 1:

Input: 2, [[1,0]]
Output: true
Explanation: There are a total of 2 courses to take.
  To take course 1 you should have finished course 0. So it is possible.

Example 2:

Input: 2, [[1,0],[0,1]]
Output: false
Explanation: There are a total of 2 courses to take.
  To take course 1 you should have finished course 0, and to take course 0 you should
  also have finished course 1. So it is impossible.

Note:

  1. The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more about how a graph is represented.
  2. You may assume that there are no duplicate edges in the input prerequisites.

我的理解是这个题就是问, 如果有两门课互为prerequisite课, 那么就False, 否则True, 注意的是这里的互为有可能是中间隔了几门课, 而不是直接的prerequisite, 例如: [(0,1),(2,0),(1,2)], 这里 1 是0 的前置课, 0 是2 的前置课, 所以1是2 的间接前置课, 但是最后一个input说2 是1 的前置课, 所以就矛盾, 不可能完成, return False. 所以思路为, 建一个dictionary, 分别将input 的每个pair(c1, c2)放入dictionary里面, 前置课(c2)为key, 后置课(c1)为value, 不过放入之前要用bfs 判断c1 是否为c2 的前置课, 如果是, 那么矛盾, return False. 否则一直判断到最后的pair, 返回Ture.

12/05/2019 Update: 这个题目实际上是有向图里面找是否有环的问题。用dfs去遍历每个graph的点,可以参考Directed Graph Loop detection and if not have, path to print all path. T: O(n)   S: O(n)

1. Constraints:

1) 实际这里的n对我这个做法没有什么用处, 因为课程id 是unique的.

2. Ideas

BFS:     T: O(n)   number of nodes,     S: O(n^2)

1) init dictionary, d

2) for pair(c1,c2) in prerequisites, use bfs to see if c1 is a prerequisity of c2, if so , return False, else, d[c2].add(c1), and until all pairs been checked. return True

3) bfs: use queue and visited to check whether there is a path from source to target.

3. Code

 class Solution:
def courseSchedule(self, numCourse, prerequisites):
def bfs(d, source, target):
if source not in d: return False
queue, visited = collections.deque([source]), set([source])
while queue:
node = queue.popleft()
if node == target: return True
for each in d[node]:
if each not in visited:
queue.append(each)
visited.add(each)
return False d = collections.defaultdict(set)
for c1, c2 in prerequisites:
if bfs(d,c1, c2): return False
d[c2].add(c1)
return True

4. Test cases:

1) [(0,1),(2,0),(1,2)],  =>   False

[LeetCode] 207 Course Schedule_Medium tag: BFS, DFS的更多相关文章

  1. [LeetCode] 490. The Maze_Medium tag: BFS/DFS

    There is a ball in a maze with empty spaces and walls. The ball can go through empty spaces by rolli ...

  2. [LeetCode] 133. Clone Graph_ Medium tag: BFS, DFS

    Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJ's ...

  3. [LeetCode] 529. Minesweeper_ Medium_ tag: BFS

    Let's play the minesweeper game (Wikipedia, online game)! You are given a 2D char matrix representin ...

  4. [LeetCode] 690. Employee Importance_Easy tag: BFS

    You are given a data structure of employee information, which includes the employee's unique id, his ...

  5. [LeetCode] 733. Flood Fill_Easy tag: BFS

    An image is represented by a 2-D array of integers, each integer representing the pixel value of the ...

  6. [LeetCode] 130. Surrounded Regions_Medium tag: DFS/BFS

    Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A reg ...

  7. [LeetCode] 849. Maximize Distance to Closest Person_Easy tag: BFS

    In a row of seats, 1 represents a person sitting in that seat, and 0 represents that the seat is emp ...

  8. [LeetCode] 513. Find Bottom Left Tree Value_ Medium tag: BFS

    Given a binary tree, find the leftmost value in the last row of the tree. Example 1: Input: 2 / \ 1 ...

  9. [LeetCode] 821. Shortest Distance to a Character_Easy tag: BFS

    Given a string S and a character C, return an array of integers representing the shortest distance f ...

随机推荐

  1. 【大数据系列】hive安装及启动

    一.安装好jdk和hadoop 二.下载apache-hive https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.0/ 三.解压到安装 ...

  2. filter对数组和对象的过滤

    1,对数组的过滤 let arr = ['1', '2', '3'] let b = arr.filter(val => val === '2') console.log(b) // ['2] ...

  3. LeetCode 27 Remove Element (移除数组中指定元素)

    题目链接: https://leetcode.com/problems/remove-element/?tab=Description   Problem : 移除数组中给定target的元素,返回剩 ...

  4. CSS 盒子模型 二

    Sublime 快捷键: 文件保存后,输入 html:xt + tab  ,补全html html:xt <!DOCTYPE html PUBLIC "-//W3C//DTD XHTM ...

  5. CentOS 6.8下更改Apache默认网站安装目录

    首先,当我们搭建好LAMP环境后,Apache服务器默认的网站安装目录是/var/www/html 然而我们搭建项目时为了方便,我们是按照自己的意愿更改网站目录的 现在假设,按照意愿设定的网站目录为/ ...

  6. Windows Server 2008 R2之一活动目录服务部署

    测试环境: 服务器:计算机名Win2008R2CNDC,已安装Windows Server 2008 R2.IPV4:192.168.1.13,255.255.255.0,网关地址192.168.1. ...

  7. Spark2 Dataset DataFrame空值null,NaN判断和处理

    import org.apache.spark.sql.SparkSession import org.apache.spark.sql.Dataset import org.apache.spark ...

  8. 关于Thinkphp访问不正常的问题

    最近遇见了个蹩脚的问题,我放在服务器的项目(thinkphp框架)只能访问默认路径内容,不管你url怎么写的,他就访问默认那个文件.. 对于有强迫症的我来说实在是欺人太甚!!! 于是乎我就抓耳挠腮了. ...

  9. web前端开发笔记(2)

    一.什么是作用域. 所有变量都存在于一个执行环境中(也称作用域),这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量.总结: 执行环境有全局执行环境和函数执行环境. 每次进入一个新执 ...

  10. NTLM

    我们介绍Kerberos认证的整个流程.在允许的环境下,Kerberos是首选的认证方式.在这之前,Windows主要采用另一种认证协议——NTLM(NT Lan Manager).NTLM使用在Wi ...