LeetCode 207 Course Schedule
来源:互联网 发布:手机上怎么修改mac地址 编辑:程序博客网 时间:2024/05/29 18:02
class Solution { public boolean canFinish(int numCourses, int[][] prerequisites) { ArrayList[] graph = new ArrayList[numCourses]; int[] degree = new int[numCourses]; Queue queue = new LinkedList(); int count = 0; for(int i = 0;i<numCourses;i++){ graph[i] = new ArrayList();//针对每一个顶点创建ArrayList } for(int i = 0;i<prerequisites.length;i++){ int k = prerequisites[i][1];//图中顶点序号为i的课程的先修课程序号为prerequisites[i][1]即k degree[k]++;//先修课程顶点出度加1 graph[prerequisites[i][0]].add(k);//在顶点i课程的arraylist中加入先修课程的顶点序号k } for(int i = 0;i<degree.length;i++){ if(degree[i] == 0){//如果该课程不是其他任何课程的先修,加入队列,计数加一 queue.add(i); count++; } } while(queue.size() != 0){ int course = (int) queue.poll(); for(int i = 0;i<graph[course].size();i++){ int pointer = (int) graph[course].get(i); degree[pointer]--; if(degree[pointer] == 0){ queue.add(pointer); count++; } } } if(count == numCourses) return true; else return false; }}
以上是第一种办法,广度优先搜索(BFS)
class Solution { public boolean canFinish(int numCourses, int[][] prerequisites) { ArrayList[] graph = new ArrayList[numCourses]; for(int i = 0;i<numCourses;i++){ graph[i] = new ArrayList(); } boolean[] visited = new boolean[numCourses]; for(int i = 0;i<prerequisites.length;i++){ graph[prerequisites[i][1]].add(prerequisites[i][0]); }//其实就相当于给每个顶点创建了链表,总的就是一个邻接表。每个链表里都是其先修课程序号。 for(int i = 0;i<numCourses;i++){ if(!dfs(graph,visited,i)){//dfs的结果如果是false,则表示有环。 return false; } } return true; } private boolean dfs(ArrayList[] graph,boolean[] visited,int course){ if(visited[course]) return false; else visited[course] = true; for(int i = 0;i<graph[course].size();i++){ if(!dfs(graph,visited,(int)graph[course].get(i))){ return false; } } visited[course] = false;//如果只是某个无关联的序号被访问过,作为其他序号的先修课程进行dfs的时候,就需要在dfs前恢复false状态 return true; }}这是深度优先搜索方法(DFS)。
阅读全文
0 0
- LeetCode 207 - Course Schedule
- leetcode 207: Course Schedule
- LeetCode 207-Course Schedule
- 【Leetcode】Course Schedule #207
- 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
- native开发学习flexbox:不错的参考文档,看这一篇就够了
- 自定义控件的相关操作,长按按钮操作
- BZOJ1189: [HNOI2007]紧急疏散evacuate
- jsp中获取get请求过来的参数
- API接口安全性设计
- LeetCode 207 Course Schedule
- windows批处理网卡切换脚本
- 材质贴图规范
- dict 和set
- 职业规划-Python开发工程师
- 矩阵、向量求导法则
- Ubuntu samba服务器
- 开通博客来写个日记吧
- 分布式电商技术架构