Leetcode 210. Course Schedule II

There are a total of n courses you have to take, labeled from 0 to n - 1.
Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as a pair: [0,1]
Given the total number of courses and a list of prerequisite pairs, return the ordering of courses you should take to finish all courses.
There may be multiple correct orders, you just need to return one of them. If it is impossible to finish all courses, return an empty array.

For example:
2, [[1,0]]
There are a total of 2 courses to take. To take course 1 you should have finished course 0. So the correct course order is [0,1]
4, [[1,0],[2,0],[3,1],[3,2]]
There are a total of 4 courses to take. To take course 3 you should have finished both courses 1 and 2. Both courses 1 and 2 should be taken after you finished course 0. So one correct course order is [0,1,2,3]. Another correct ordering is[0,2,1,3].

思路:
基本同207題是一樣的姻几,只是要求返回的結果不同,參見207.

public int[] findOrder(int numCourses, int[][] prerequisites) {
    //tip 后面的是前置條件
    int[] preCount = new int[numCourses];
    List<List<Integer>> unlock = new ArrayList<>();
    for (int i = 0; i < numCourses; i++) {
        unlock.add(new ArrayList<>());
    }

    for (int i = 0; i < prerequisites.length; i++) {
        int[] pre = prerequisites[i];
        preCount[pre[0]] += 1;
        unlock.get(pre[1]).add(pre[0]);
    }

    //use queue to search and count
    int cnt = 0;
    Queue<Integer> q = new LinkedList<>();
    for (int i = 0; i < numCourses; i++) {
        if (preCount[i] == 0) {
            q.offer(i);
        }
    }
    int[] res = new int[numCourses];
    while (!q.isEmpty()) {
        int num = q.poll();
        res[cnt] = num;
        cnt++;
        List<Integer> subs = unlock.get(num);
        for (int i = 0; i < subs.size(); i++) {
            int next = subs.get(i);
            preCount[next] -= 1;
            if (preCount[next] == 0) {
                q.offer(next);
            }
        }
    }

    return cnt == numCourses ? res : new int[0];
}
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末庵楷,一起剝皮案震驚了整個濱河市啦逆,隨后出現的幾起案子伞矩,更是在濱河造成了極大的恐慌,老刑警劉巖夏志,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乃坤,死亡現場離奇詭異,居然都是意外死亡盲镶,警方通過查閱死者的電腦和手機侥袜,發(fā)現死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溉贿,“玉大人枫吧,你說我怎么就攤上這事∮钌” “怎么了九杂?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵颁湖,是天一觀的道長。 經常有香客問我例隆,道長甥捺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任镀层,我火速辦了婚禮镰禾,結果婚禮上,老公的妹妹穿的比我還像新娘唱逢。我一直安慰自己吴侦,他們只是感情好,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布坞古。 她就那樣靜靜地躺著备韧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪痪枫。 梳的紋絲不亂的頭發(fā)上织堂,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天,我揣著相機與錄音奶陈,去河邊找鬼易阳。 笑死,一個胖子當著我的面吹牛尿瞭,可吹牛的內容都是我干的闽烙。 我是一名探鬼主播翅睛,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼声搁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了捕发?” 一聲冷哼從身側響起疏旨,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扎酷,沒想到半個月后檐涝,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡法挨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年谁榜,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凡纳。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡窃植,死狀恐怖,靈堂內的尸體忽然破棺而出荐糜,到底是詐尸還是另有隱情巷怜,我是刑警寧澤葛超,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站延塑,受9級特大地震影響绣张,放射性物質發(fā)生泄漏。R本人自食惡果不足惜关带,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一侥涵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宋雏,春花似錦独令、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舍败,卻和暖如春招狸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背邻薯。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工裙戏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人厕诡。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓累榜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親灵嫌。 傳聞我的和親對象是個殘疾皇子壹罚,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內容