615. Course Schedule

https://www.lintcode.com/problem/course-schedule/description?_from=ladder&&fromId=1

为什么不可以用  for(int[] prerequisite: prerequisites) 呢 (使用Leetcode上的方法)?因为当 prerequisites 的 length 很大的时候,会超时。所以要定义一个edges[]变量,用来记录每一门课程的后续课程。

要注意数据类型的转换:

int pointer = (int)edges[curr].get(i);
indegree[pointer]--;

public class Solution {
/*
* @param numCourses: a total of n courses
* @param prerequisites: a list of prerequisite pairs
* @return: true if can finish all courses or false
*/
public boolean canFinish(int numCourses, int[][] prerequisites) {
// write your code here
if(prerequisites == null || prerequisites.length == 0 || prerequisites[0].length == 0) {
return true;
}
List[] edges = new List[numCourses];
int[] indegree = new int[numCourses];
int count = 0;
Queue<Integer> queue = new LinkedList<>();
for(int i = 0; i < numCourses; i++) {
edges[i] = new LinkedList<>();
}
int len = prerequisites.length;
for(int i = 0; i < len; i++) {
indegree[prerequisites[i][0]]++;
edges[prerequisites[i][1]].add(prerequisites[i][0]);
}
for(int i = 0; i < numCourses; i++) {
if(indegree[i] == 0) {
queue.offer(i);
}
}
while(!queue.isEmpty()) {
int curr = queue.poll();
count++;
int n = edges[curr].size();
for(int i = 0; i < n; i++) {
int pointer = (int)edges[curr].get(i);
indegree[pointer]--;
if(indegree[pointer] == 0) {
queue.offer(pointer);
}
}
}
return count == numCourses;
}
}

616. Course Schedule II

https://www.lintcode.com/problem/course-schedule-ii/description?_from=ladder&&fromId=1

public class Solution {
/*
* @param numCourses: a total of n courses
* @param prerequisites: a list of prerequisite pairs
* @return: the course order
*/
public int[] findOrder(int numCourses, int[][] prerequisites) {
// write your code here
int[] result = new int[numCourses];
List[] edges = new List[numCourses];
int[] indegree = new int[numCourses];
int count = 0;
Queue<Integer> queue = new LinkedList<>();
for(int i = 0; i < numCourses; i++) {
edges[i] = new LinkedList<>();
}
int len = prerequisites.length;
for(int i = 0; i < len; i++) {
indegree[prerequisites[i][0]]++;
edges[prerequisites[i][1]].add(prerequisites[i][0]);
}
for(int i = 0; i < numCourses; i++) {
if(indegree[i] == 0) {
queue.offer(i);
}
}
while(!queue.isEmpty()) {
int curr = queue.poll();
result[count] = curr;
count++;
int n = edges[curr].size();
for(int i = 0; i < n; i++) {
int pointer = (int)edges[curr].get(i);
indegree[pointer]--;
if(indegree[pointer] == 0) {
queue.offer(pointer);
}
}
}
if(count != numCourses) {
return new int[0];
}
return result;
}
}

最新文章

  1. JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
  2. VLC 资料整理
  3. [转]别再抱怨了,国内这么多优秀的Android资源你都知道吗?
  4. 使用CallableStatement的用法
  5. scrapy的scrapyd使用方法
  6. Java EE 编程中路径
  7. 非Unicode工程读取Unicode文件
  8. js注意
  9. hdu----(1257)最少拦截系统(dp/LIS)
  10. C# 动态创建出来的窗体间的通讯 delegate2
  11. Qt持久性对象进行序列化(同时比较了MFC与Java的方法)
  12. Python-数据类型之列表
  13. 使用Java创建指定大小的空文件夹
  14. python面向对象学习(七)单例
  15. Linker Scripts3--MEMORY Command
  16. Oracle 网络监听配置管理
  17. Fruit Ninja(随机数rand())
  18. 使用光盘作为yum软件安装源安装X Window
  19. 一个非常适合IT团队的在线API文档、技术文档工具 (ShowDoc)
  20. 《Python》 文件操作

热门文章

  1. U盘安装Windows原版系统(安装方式有很多,我讲我的安装方式)
  2. python可以提高程序执行速度N倍你知道吗?
  3. requests 可以玩接口自动化测试,爬虫也是可以滴
  4. UGUI背包系统
  5. 5分钟安装 关于win10安装composer PHP 用来管理依赖(dependency)关系的工具
  6. bfs经典
  7. js时间国际化
  8. Oracle创建表空间、表、一级用户授权
  9. 22 pycharm如何将一段代码同时向左缩进一个tab键
  10. LearnOpenGL