207. 課程表
描述
你這個學期必須選修 numCourse 門課程,記為 0 到 numCourse-1 。
在選修某些課程之前需要一些先修課程。 例如,想要學習課程 0 ,你需要先完成課程 1 ,我們用一個匹配來表示他們:[0,1]
給定課程總量以及它們的先決條件,請你判斷是否可能完成所有課程的學習?
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/course-schedule
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
solution
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class LeetCode {
public static void main(String[] args) {
Solution s = new Solution();
int numCourses = 2;
int [][] prerequisites = {
{0,1},
{1,0}
};
System.out.print(s.canFinish(numCourses, prerequisites));
}
}
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
Map<Integer, Set<Integer>> deps = new HashMap<Integer, Set<Integer>>();
Set<Integer> finished = new HashSet<Integer>();
for (int[] pre : prerequisites){
Set<Integer> dep = deps.get(pre[0]);
if (dep == null){
dep = new HashSet<Integer>();
}
dep.add(pre[1]);
deps.put(pre[0], dep);
}
System.out.println(deps);
while(finishCourse(numCourses, deps, finished)){
;
}
if (finished.size() == numCourses){
return true;
}
return false;
}
//每次遍歷一遍,找到可以完成的課程加入finished
private boolean finishCourse(int numCourses,
Map<Integer, Set<Integer>> deps, Set<Integer> finished){
boolean hasFinishedcourse = false;
for (int i = 0; i < numCourses; i++){
if (finished.contains(i)){
continue;
}
Set<Integer> dep = deps.get(i);
if (dep == null || finished.containsAll(dep)) {
hasFinishedcourse = true;
finished.add(i);
//System.out.println("finish: " + i);
}
}
return hasFinishedcourse;
}
}
其他思路
這個解決方法裡finished.containsAll(dep)實際上是有重複計算的.
可以每次遍歷以後找出新的finished課程,就在dep裡面remove,另外待finish課程也應該使用集合,這樣演算法複雜度就是O(n)了
相關文章
- LeetCode 207. 課程表(Medium)LeetCode
- 力扣刷題筆記:207. 課程表力扣筆記
- 學校課程表爬取
- 3.25 建立報名表和課程表
- 207. Course Schedule
- LeetCode題解(0210):課程表II(Python)LeetCodePython
- --查詢班級表、課程表、學生選課表、學生表、成績表、15(3+2)計算
- 必看,經典sql面試題2(學生表_課程表_成績表_教師表)SQL面試題
- 必看,經典sql面試題1(學生表_課程表_成績表_教師表)SQL面試題
- Python開發系列課程彙總 - 課程大綱Python
- 課程介紹
- 課程講義
- 課程連結
- 課程實習
- HarmonyOS 第一課:基礎課程
- HarmonyOS 第一課:中級課程
- PYTHON openpyxl 讀取課程表,輪值排班表,輸出每日班級簡報Python
- Homepage 課程主頁
- 1410: 課程平均分
- FPGA課程培訓FPGA
- PHP課程總結PHP
- 課程管理系統
- openERP課程轉載
- 教學課程安排
- 資料庫課程作業筆記 - 編寫表單驗證資料庫筆記
- 人工智慧教育課程第九次課程11月12日人工智慧
- 網易雲課堂影片課件課程下載工具,如何在電腦端下載網易雲課堂影片課程課件資料到本地?
- Windows 除錯工具課程Windows除錯
- 邏輯課程目錄
- 數學課程目錄
- 寫作課程目錄
- Google 免費 AI課程GoAI
- python是什麼課程Python
- 課程排課系統:智慧排課+線上約課+直播上課+作業打卡!
- 計算機網路微課堂-課程概述計算機網路
- 我的慕課實戰課程上線了
- 【看雪課程】組合語言,開課啦!組合語言
- mysql重點題目--查詢“01“課程比“02“課程成績高的學生的資訊及課程分數MySql