当前位置: 代码迷 >> 综合 >> leetcode_207:Course Schedule
  详细解决方案

leetcode_207:Course Schedule

热度:6   发布时间:2023-12-10 22:43:47.0

这个题本质上就是判断一个有向图中是否有环,解法我是参照的别人的博客写的,但是时间复杂度比较高,等以后有时间可以把里面的每一种解法都实现一遍:代码如下:

class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {
    int[] rudu = new int[numCourses];   //存所有课程入度的数组boolean[] flag = new boolean[prerequisites.length];	//存放所有的点是否已经删除了Stack<Integer> stack = new Stack<>();for (int[] pre : prerequisites) {
      //初始化所有的入度++rudu[pre[0]];}for (int i = 0; i < rudu.length; ++i) {
    if (rudu[i] == 0)stack.push(i);  //将入度为0的节点入栈}while (!stack.empty()) {
    int start = stack.pop();     //将入度为0的点出栈for (int i = 0; i < prerequisites.length; ++i) {
    if (rudu[prerequisites[i][1]]==0 && !flag[i]) {
    flag[i] = true;--rudu[prerequisites[i][0]];	//删除了节点后入度要减1if (rudu[prerequisites[i][0]] == 0)stack.push(prerequisites[i][0]);}}}for (boolean fg : flag) {
    if (!fg) 	//只要有一个return false;}return true;}
}
  相关解决方案