[LeetCode]207. Course Schedule
来源:互联网 发布:视频去噪声软件 编辑:程序博客网 时间:2024/05/28 23:21
https://leetcode.com/problems/course-schedule/?tab=Description
prerequisites里面的int[]表示要修课程int[0]必须先修int[1],求是否能修完所有课程
两解:
就是找是否有环
解法一:
indegree表示入度,matrix记录课程要求,从所有入度为0的点开始,删掉与当前点相连的所有边,如果删除后边的另一个点入度为零则加到queue内。环内的点始终不会加入到queue中,因此始终遍历不到,如果有环,count < numCourses
public class Solution { public boolean canFinish(int numCourses, int[][] prerequisites) { int[] indegree = new int[numCourses]; int[][] matrix = new int[numCourses][numCourses]; for (int i = 0; i < prerequisites.length; i++) { int pre = prerequisites[i][1]; int ready = prerequisites[i][0]; if (matrix[pre][ready] == 0) { indegree[ready]++; } matrix[pre][ready] = 1; } Queue<Integer> 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 = queue.poll(); count++; for (int i = 0; i < numCourses; i++) { if (matrix[course][i] != 0) { if (--indegree[i] == 0) { queue.offer(i); } } } } return count == numCourses; }}
解法二:
dfs,用visit记录当前访问过的点,如果重复访问就有环
public class Solution { public boolean canFinish(int numCourses, int[][] prerequisites) { ArrayList[] list = new ArrayList[numCourses]; for (int i = 0; i < list.length; i++) { list[i] = new ArrayList(); } for (int i = 0; i < prerequisites.length; i++) { int ready = prerequisites[i][0]; int pre = prerequisites[i][1]; list[pre].add(ready); } boolean[] visit = new boolean[numCourses]; for (int i = 0; i < numCourses; i++) { if (!dfs(list, visit, i)) { return false; } } return true; } private boolean dfs(ArrayList[] list, boolean[] visit, int index) { if (visit[index]) { return false; } visit[index] = true; for (int i = 0; i < list[index].size(); i++) { if (!dfs(list, visit, (int)(list[index].get(i)))) { return false; } } visit[index] = false; return true; }}
0 0
- [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
- typedef
- 闪回数据
- php正则匹配开头和最后之间的字符串
- 关于网络IP地址的分类
- 类型转换下编译器偷偷做的事————整形提升(Inter Promotion)
- [LeetCode]207. Course Schedule
- 【Zookeeper】角色、顺序号、读写机制
- >/dev/null 2>&1 & 和-daemon和2>&1 &对比
- [C++] 编程实践之1: Google的C++代码风格6:命名约定
- String直接赋字符串和new String的区别
- java nio实现聊天室功能
- Android Studio 配置注释模板
- iBET Online Casino ADIDAS Boots Lucky Draw(Online Casino Malaysia Lucky Draw)
- 在Web应用中创建Spring容器的两种方式