科隆大学官网,车辆损失险是什么意思,real电影资源
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, is it possible for you to finish all courses?
Example 1:
Input: 2, [[1,0]] Output: true Explanation: There are a total of 2 courses to take. To take course 1 you should have finished course 0. So it is possible.
Example 2:
Input: 2, [[1,0],[0,1]] Output: false Explanation: There are a total of 2 courses to take. To take course 1 you should have finished course 0, and to take course 0 you should also have finished course 1. So it is impossible.
Note:
这道题目是检测图内是否有环的应用题目,解决方案是经典的拓扑排序即可。之前实习面试的时候,太紧张没能想到拓扑排序。
所以,这次也特意选择拓扑排序类的题目做一下。感觉确实是不熟悉,简单的程序也调了挺久。
解这道题的基本思路如下:
结合这个思路,编码实现如下:
class Solution { public: bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { //initiate outNodes and inEdges vector<int> outNodes(numCourses); vector<vector<int>> inEdges(numCourses); for(int i = 0; i < numCourses; i++) { outNodes[i] = 0; } int n = prerequisites.size(); for(int i = 0; i < n; i++) { outNodes[prerequisites[i].first] += 1; inEdges[prerequisites[i].second].push_back(prerequisites[i].first); } int leftNode = numCourses; bool toFind = true; while(toFind) { // find next node to move toFind = false; for(int i = 0; i < numCourses; i++) { // remove the outNodes and update outNodes vector if(outNodes[i] == 0) { outNodes[i] -= 1; for(int j = 0; j < inEdges[i].size(); j++) { outNodes[inEdges[i][j]] -= 1; } toFind = true; leftNode -= 1; break; } } } return (leftNode == 0); } };
附加知识:pair的基本使用。
pair<int, int> p(1,2);
pair<int, int> p; p = make_pair(1,2);
p.first = p.second;
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论