Leetcode: 210. Course Schedule II | 含C++笔记

Course Schedule I的延伸,这次要排出课程顺序。

思路

有大概想到去找node的顺序跟课程顺序有关,结果发现DFS离开结束点的顺序颠倒过来,就是这题要的output~所以用个vector纪录就行了。
 
 
 

笔记

c++要回传空阵列时,用大括号。

return {}; //correct
return []; 

想把vector的el顺序颠倒,可以用reverse(),加一行程序,vectorname的顺序就颠倒了

for(auto el, vectorname)
    cout << el << " ";
reverse(vectorname.begin(), vectorname.end();
for(auto el, vectorname)
    cout << el << " ";

 
 
 

程序码

class Solution {
public:
    vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
        vector<vector<int>> adjlist(numCourses);
        for(auto el: prerequisites) {
            adjlist[el[1]].push_back(el[0]);
        }
        
        vector<bool> discover(numCourses, false), finish(numCourses, false);
        
        vector<int> q;
        for(int i = 0; i < numCourses; i++) 
            if(!finish[i])
                if(cyclic(adjlist, discover, finish, i, q))
                    return {};
        
        reverse(q.begin(), q.end());
        return q;
    }
private:
    bool cyclic(vector<vector<int>>& adjlist, vector<bool>& discover, vector<bool>& finish, int curr_node, vector<int>& q) {
        if (discover[curr_node])
            return true;
        if (finish[curr_node])
            return false;
        discover[curr_node] = true;
        for(auto el: adjlist[curr_node]) {
            if(cyclic(adjlist, discover, finish, el, q))
                return {};
        }
        discover[curr_node] = false; finish[curr_node] = true;
        q.push_back(curr_node);
        return false;
    }
};

 
 
 

Bug参考

重打一次昨天的cyclic()时,一直跑出error type-ed: cannot have a name的错误,後来发现是我adjlist的宣告型态少打一个角括号<
 
 
赚到一天耶
 
参考:
https://web.ntnu.edu.tw/~algo/DirectedAcyclicGraph.html
https://ithelp.ithome.com.tw/articles/10266857


<<:  F# 语言和你 SAY HELLO!!

>>:  [06] [Flask 快速上手笔记] 05. 发送请求与文件上传

[DAY12]测试SSH连线

接续之前做容器,希望可以用code连到另台电脑的container,做了ssh的一些测试 先做了一个...

Golang 学习笔记-- 快速上手/重点整理 - 1

有鉴於自己的金鱼脑,常常学了东西就瞬间忘光,觉得需要找寻一个方式让自己能够纪录并且整理内化。因此决定...

[day14]Vue.js 网站基本建置

其实今年才刚学Vue.js ,目前的程度大概就是写几个简单的功能而已,要写一个比较完整的网站还是十分...

UNIX、BSD 与 Linux 的爱恨情仇

本文目标 熟悉 UNIX 作业系统的发展 认识自由软件运动与 GNU 计画 了解 C 语言是被设计来...

要怎麽计算「顾客终身价值(LTV)」?

什麽是LTV Lifetime value 的头字母简称。中文翻为「顾客终身价值」。 意思是,平均而...