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