日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

leetcode 207. Course Schedule | 207. 课程表(Java)

發布時間:2024/2/28 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 207. Course Schedule | 207. 课程表(Java) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

https://leetcode.com/problems/course-schedule/

題解

這的道題思路,來源于數據結構中的 拓撲排序 問題,主要思路是,通過逐步遍歷刪除入度為 0 的節點,判斷該圖是否一個有向無環圖(DAG)。即,判斷該圖是否滿足兩個條件:

  • 必須能夠連通所有節點 (分析本題場景發現,可以不經過所有節點)
  • 不能有環
  • 詳細解題思路見下圖:

    import java.util.ArrayList;class Node {int inDegree;ArrayList<Integer> children;boolean alive; // whether deletedpublic Node() {alive = true;children = new ArrayList<>();} }class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {// init coursesNode[] nodes = new Node[numCourses];for (int i = 0; i < numCourses; i++) {nodes[i] = new Node();}// init prerequisitesfor (int i = 0; i < prerequisites.length; i++) {nodes[prerequisites[i][0]].children.add(prerequisites[i][1]);nodes[prerequisites[i][1]].inDegree++;}// check DAGint remain = numCourses; // remaining nodesboolean valid = true; // last loop really workswhile (valid && remain > 0) {valid = false;for (int i = 0; i < numCourses; i++) {if (nodes[i].inDegree == 0 && nodes[i].alive) {for (int n : nodes[i].children) { // updatenodes[n].inDegree--;}valid = true;nodes[i].alive = false;remain--;}}}return remain == 0;} }

    每一次提交運行時間不一樣,但總體來看效率比較低,后續看一下是否有優化解法。

    總結

    以上是生活随笔為你收集整理的leetcode 207. Course Schedule | 207. 课程表(Java)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。