ok i'm back: 210-course-schedule-ii, 43-multiply-strings

This commit is contained in:
2023-12-24 18:51:58 -07:00
parent 6df68a24f2
commit 44dd48d78b
9 changed files with 132 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
#include "soln.hpp"
int main()
{
int numCourses = 4;
vector<vector<int>> prerequisites{{0, 1}, {0, 2}, {3, 0}};
Solution soln;
cout << "Ordering of courses:" << endl;
for (int num : soln.findOrder(numCourses, prerequisites))
cout << "->" << num;
cout << endl;
return 0;
}

View File

@@ -0,0 +1,43 @@
#include "soln.hpp"
vector<int> Solution::findOrder(int numCourses, vector<vector<int>> &prerequisites)
{
vector<vector<int>> adj(numCourses); // adjacency list
vector<int> ans_order;
vector<int> in_degrees(numCourses);
for (vector<int> &p : prerequisites)
{
adj[p[1]].push_back(p[0]); // [1,0] -> course 1 will have incoming edge from 0
in_degrees[p[0]]++; // increment in degree of course 1
}
// find starting nodes, which don't hv prereqs
// so this will be 0 alone
queue<int> bfs_q;
for (int i = 0; i < numCourses; i++)
{
if (in_degrees[i] == 0)
bfs_q.push(i);
}
// BFS
while (bfs_q.size())
{
int cur = bfs_q.front();
bfs_q.pop();
ans_order.push_back(cur);
for (int out_node : adj[cur])
{
// check if no more prereqs
// if yes, bfs on that
if (in_degrees[out_node] == 1)
bfs_q.push(out_node);
in_degrees[out_node]--;
}
}
// if solution exists, answer will have all courses
if (ans_order.size() == numCourses)
return ans_order;
return {};
}

View File

@@ -0,0 +1,7 @@
#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
vector<int> findOrder(int numCourses, vector<vector<int>> &prerequisites);
};