LeetCode 207.Course Schedule
来源:互联网 发布:nba球员各项数据总排名 编辑:程序博客网 时间:2024/05/19 23:28
description:
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?
For example:
2, [[1,0]]
There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.
2, [[1,0],[0,1]]
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:
The input prerequisites is a graph represented by a list of edges, not adjacency matrices. Read more about how a graph is represented.
You may assume that there are no duplicate edges in the input prerequisites.
click to show more hints.
Hints:
This problem is equivalent to finding if a cycle exists in a directed graph. If a cycle exists, no topological ordering exists and therefore it will be impossible to take all courses.
Topological Sort via DFS - A great video tutorial (21 minutes) on Coursera explaining the basic concepts of Topological Sort.
Topological sort could also be done via BFS.
这个题目就是一个典型的topological sorting problems
注意题目中的入度和删除元素之间的关系
public class Solution { public boolean canFinish(int numCourses, int[][] prerequisites) { if (numCourses == 0) { return false; } List[] edges = new List[numCourses]; int[] indegree = new int[numCourses]; for (int i = 0; i < numCourses; i++) { edges[i] = new ArrayList<Integer>(); } for (int i = 0; i < prerequisites.length; i++) { indegree[prerequisites[i][0]]++; edges[prerequisites[i][1]].add(prerequisites[i][0]); } Queue queue = new LinkedList<>(); for (int i = 0; i < numCourses; i++) { if (indegree[i] == 0) { queue.offer(i); } } int count = 0; while (!queue.isEmpty()) { int course = (int)queue.poll(); count++; int size = edges[course].size(); for (int i = 0; i < size; i++) { int pointer = (int)edges[course].get(i); indegree[pointer]--; if (indegree[pointer] == 0) { queue.offer(pointer); } } } return count == numCourses; }}
- [leetcode] 207.Course Schedule
- Leetcode 207. Course Schedule
- 207. Course Schedule LeetCode
- leetcode 207. Course Schedule
- leetcode.207. Course Schedule
- LeetCode 207. Course Schedule
- 【LeetCode】207. Course Schedule
- [leetcode] 207. Course Schedule
- leetcode-207. Course Schedule
- leetcode 207. Course Schedule
- [LeetCode] 207. Course Schedule
- 【Leetcode】207. Course Schedule
- Leetcode 207. Course Schedule
- LeetCode 207.Course Schedule
- Leetcode 207. Course Schedule
- Leetcode 207. Course Schedule
- [LeetCode]207. Course Schedule
- Leetcode 207. Course Schedule
- 3D图形学理论入门指南
- 用recycleView封装成可扩展列表 点击父布局时报数组越界错误
- Win7 64 安装 MongoDB3.4
- permission denied
- copy,mutableCopy,retain区别
- LeetCode 207.Course Schedule
- 公司短信平台接入api
- 让Source Insight完美支持中文注释
- C# Convert类
- java中函数是值传递还是引用传递?
- MySql模糊查询like通配符使用详细介绍
- 数据库锁机制
- activity切换动画与overridePendingTransition方法
- 关于__IPHONE_OS_VERSION_MAX_ALLOWED和__IPHONE_OS_VERSION_MIN_ALLOWED的用法