207. 课程表 --力扣 --JAVA
2023-12-19 06:35:25
题目
你这个学期必须选修?
numCourses
?门课程,记为?0
?到?numCourses - 1
?。在选修某些课程之前需要一些先修课程。 先修课程按数组?
prerequisites
?给出,其中?prerequisites[i] = [ai, bi]
?,表示如果要学习课程?ai
?则?必须?先学习课程??bi
?。
- 例如,先修课程对?
[0, 1]
?表示:想要学习课程?0
?,你需要先完成课程?1
?。请你判断是否可能完成所有课程的学习?如果可以,返回?
true
?;否则,返回?false
?。
解题思路
- 以课程id进行整理数据,收集需要当前课程作为前置课程的课程;
- 从不需要前置课程的课程进行清除数据;
- 若课程数量最后清为0则可以学完所有课程,否则则不可以。
代码展示
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
List<List<Integer>> resources = new ArrayList<>();
int[] indegrees = new int[numCourses];
for (int i = 0; i < numCourses; i++){
resources.add(new ArrayList<>());
}
for (int[] nums : prerequisites){
indegrees[nums[0]]++;
resources.get(nums[1]).add(nums[0]);
}
Queue<Integer> queue = new LinkedList<>();
for (int i = 0; i < numCourses; i++){
if(indegrees[i] == 0){
queue.add(i);
}
}
while (!queue.isEmpty()){
int val = queue.poll();
numCourses--;
for (int num : resources.get(val)){
if(--indegrees[num] == 0){
queue.add(num);
}
}
}
return numCourses == 0;
}
}
文章来源:https://blog.csdn.net/qq_45794129/article/details/135074389
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!