思路:典型的拓扑排序模板
class Solution {
public:
vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
vector<int> indegree(numCourses);
vector<int> v(numCourses);
for (auto& each : prerequisites) {
indegree[each[0]]++;
v[each[1]].push_back(each[0]);
}
queue<int> q;
vector<int> ans;
//int cnt = 0; ans记录拓扑排序的话,就用不到cnt了
for (int i = 0; i < numCourses; ++i) {
if (!indegree[i]) q.push(i);
}
while (!q.empty()) {
int frt = q.front();
ans.push_back(frt);
q.pop();
//cnt++;
for (auto& each : v[frt]) {
indegree[each]--;
if (!indegree[each]) q.push(each);
}
}
if (ans.size() == numCourses) return ans;
return {};
}
};
优化:
就不用cnt记录了,直接用ans.size()判断,因为ans.size()和cnt是一样的!