- 浏览: 183719 次
- 性别:
- 来自: 济南
文章分类
最新评论
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.
这是一道有关图的经典题,本质就是能否进行拓扑排序,拓扑排序必须是有向无环图,因此我们要判断每个顶点开始是否有环,如果有环就不能进行拓扑排序,如果没有就可以,返回false,这种方法是DFS实现。我们还可以用BFS方法来解决,用BFS时主要要维护一个入度为0的集合,我们用队列来实现。下面是代码实现:
DFS:
BFS:
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.
这是一道有关图的经典题,本质就是能否进行拓扑排序,拓扑排序必须是有向无环图,因此我们要判断每个顶点开始是否有环,如果有环就不能进行拓扑排序,如果没有就可以,返回false,这种方法是DFS实现。我们还可以用BFS方法来解决,用BFS时主要要维护一个入度为0的集合,我们用队列来实现。下面是代码实现:
DFS:
public class Solution { boolean[] isVisited; boolean[] onStack; public boolean canFinish(int numCourses, int[][] prerequisites) { if(prerequisites == null || prerequisites.length == 0) return true; List<Integer>[] graph = new List[numCourses]; isVisited = new boolean[numCourses]; onStack = new boolean[numCourses]; for(int i = 0; i < prerequisites.length; i++) { int key = prerequisites[i][1]; int value = prerequisites[i][0]; if(graph[key] == null) graph[key] = new ArrayList<Integer>(); graph[key].add(value); } for(int i = 0; i < numCourses; i++) { if(isVisited[i] == false && hasCycle(i, graph) == true) return false; } return true; } public boolean hasCycle(int v, List<Integer>[] graph) { boolean cycle = false; isVisited[v] = true; onStack[v] = true; if(graph[v] != null) { for(int i : graph[v]) { if(isVisited[i] != true) { cycle = hasCycle(i, graph); if(cycle == true) break; } else if(onStack[i] == true) { cycle = true; break; } } } onStack[v] = false; return cycle; } }
BFS:
public class Solution { public boolean canFinish(int numCourses, int[][] prerequisites) { if(prerequisites == null || prerequisites.length == 0) return true; int[] degree = new int[numCourses]; List<Integer>[] graph = new List[numCourses]; Queue<Integer> qSet = new LinkedList<Integer>(); int edges = prerequisites.length; for(int i = 0; i < prerequisites.length; i++) { degree[prerequisites[i][0]] ++; int key = prerequisites[i][1]; int value = prerequisites[i][0]; if(graph[key] == null) graph[key] = new ArrayList<Integer>(); graph[key].add(value); } for(int i = 0; i < degree.length; i++) { if(degree[i] == 0) qSet.offer(i); } while(!qSet.isEmpty()) { int tem = qSet.poll(); if(graph[tem] != null) { for(int v : graph[tem]) { edges --; if(--degree[v] == 0) qSet.offer(v); } } } if(edges != 0) return false; return true; } }
发表评论
-
498. Diagonal Traverse
2019-11-15 13:52 265Given a matrix of M x N eleme ... -
496 Next Greater Element I
2019-11-14 13:50 267You are given two arrays (witho ... -
Word Break II
2016-03-09 03:15 384Given a string s and a dictiona ... -
Insert Interval
2016-03-08 02:11 374Given a set of non-overlapping ... -
Merge Intervals
2016-03-07 05:25 500Given a collection of intervals ... -
Merge k Sorted Lists
2016-03-07 04:03 563Merge k sorted linked lists and ... -
Multiply Strings
2016-03-06 07:27 475Given two numbers represented a ... -
N-Queens II
2016-03-06 03:06 664Follow up for N-Queens problem. ... -
N-Queens
2016-03-06 02:47 469The n-queens puzzle is the prob ... -
First Missing Positive
2016-03-05 03:09 430Given an unsorted integer array ... -
Spiral Matrix
2016-03-04 03:39 575Given a matrix of m x n element ... -
Trapping Rain Water
2016-03-04 02:54 581Given n non-negative integers r ... -
Repeated DNA Sequences
2016-03-03 03:10 426All DNA is composed of a series ... -
Increasing Triplet Subsequence
2016-03-02 02:48 898Given an unsorted array return ... -
Maximum Product of Word Lengths
2016-03-02 01:56 930Given a string array words, fin ... -
LRU Cache
2016-02-29 10:37 602Design and implement a data str ... -
Super Ugly Number
2016-02-29 07:07 676Write a program to find the nth ... -
Longest Increasing Path in a Matrix
2016-02-29 05:56 845Given an integer matrix, find t ... -
Coin Change
2016-02-29 04:39 783You are given coins of differen ... -
Minimum Height Trees
2016-02-29 04:11 707For a undirected graph with tre ...
相关推荐
java java_leetcode题解之Course Schedule III.java
"University Course Schedule Builder",一款开源的课程日程规划工具,以其独特的优势,为大学提供了定制化、高效且灵活的课表解决方案。 开源软件的一大优势在于其开放源代码,允许用户自由查看、修改和分发代码。...
确定课程列表的可能时间表 这是一项扩展功能,可帮助康涅狄格州立大学的学生选择时间表。 ...该扩展程序然后显示一个新页面,其中显示可用的课程表,确保不存在时间冲突。 然后,学生可以通过选择包括或排除课程的特定...
课程时间表 열어버렸네제인데인데로열어버렸네? 내버린로보보다?...如果在Schedule中插入更多属性或删除某些现有属性,则还需要修改ScheduleList和gui Schedule I / O Form(如ScheduleTable和InputPanel)。
完成的项目。 有些功能并不完全智能,但它们可以工作。 如果它阻止使用程序,请报告错误。 该程序是完全开源的,并使用诺基亚 qt [http://qt.nokia.com/] 制作。 联系以获取更多信息或问题。
3. 在课程注册系统中,定义了类 CourseSchedule 和类 Course,并在类 CourseSchedule 中定义了方法 add(c:Course)和方法 remove(c:Course),则类 CourseSchedule 和类 Course 之间的关系是关联关系。因为类 ...
语言:English 一键导出课程表,并在PeopleSoft网站上提供有用的快捷方式 功能此扩展可帮助学生有效地跟踪他们的课程,最大程度地减少混乱和错过的课程。 它与学校的课程选择网站集成,自动将课程信息解析为重复的...
**ScheduleViz:开源课程日程规划器** ScheduleViz是一个专为大学学生和教育机构设计的开源项目,它提供了一个交互式的、基于时间表数据的课程安排工具。这款工具利用Perl CGI(Common Gateway Interface)脚本来...
语言:English 美化UWaterloo课程表页面! 一个简单的Chrome扩展程序,改善了滑铁卢大学课程表页面的外观。 1.0.7中的新增功能:*扩展名将在新的课程表URL(classes.uwaterloo.ca)上激活。功能包括:*重组的课程搜索...
σ(星期=周一 ∧ 时间=8:00(course schedule)) ⋈ course ``` 5. **查找计算机学院的所有任课老师(姓名):** ``` (σ(院系=计算机(course)) ⋈ teacher) ``` 这些关系代数表达式展示了如何利用数据库的...
例如,可以建立一个名为`CourseSchedule`的表来存储课程信息,其中可能包含以下字段: - `course_id` (课程ID) - `course_name` (课程名称) - `teacher_id` (教师ID) - `semester` (学期) 为了查询特定学期的所有...
改进观看滑铁卢大学课程表的页面 一个简单的Chrome扩展程序,改善了滑铁卢大学课程表页面的外观。 1.0.4中的新增功能:-在某些情况下修复了类具有“封闭部分”的表格渲染-改进了表单上最新术语的计算功能包括:*重组...
python python_leetcode题解之207_Course_Schedule.py
- 解析:因为 CourseSchedule 使用 Course 类,但并不直接拥有或持久化 Course,所以是依赖关系。 8. 正确的说法是( C ) - 答案:活动图和状态图是对一个对象的生命周期进行建模,描述对象随时间变化的行为。 - ...
CourseSchedule -> Course: Add(c: Course), Remove(c: Course) ``` #### 九、UML中的关联和聚合 - **关联**:表示类之间的关系,可以通过名称、角色和多重性来描述。 - **聚合**(Aggregation):表示类之间的...
因为CourseSchedule类的方法add()和remove()依赖于Course类的对象。 8. **状态图和活动图的对比**:状态图是活动图的一个特例,主要描述一个对象的生命周期,而不是系统的静态方面。两者都描述对象随时间变化的行为...
url = "http://example.com/courseschedule" # 五邑大学课表URL response = requests.get(url) if response.status_code == 200: html_content = response.text else: print("请求失败") ``` 3. **解析HTML...
依赖关系如"CourseSchedule"依赖于"Course",表示课程安排依赖于课程的设置。泛化关系如"交通工具"和"火车",表示火车是交通工具的一种。实现关系如"Control"接口被"TV"和"Radio"类实现,表示这两个类实现了控制的...
可以通过 UML 方法显示表示出 CourseSchedule 类中的成员函数 add 和 remove 的参数是 Course 类的对象的依赖关系。 4.18 院系人员信息系统的 UML 图形表示 可以根据大学院系人员信息系统中的关系描述绘制出相应的...