Re: [闲聊] 每日leetcode

楼主: oin1104 (是oin的说)   2024-07-21 17:17:33
※ 引述 《enmeitiryous (enmeitiryous)》 之铭言:
:  
2392.build a matrix with condition
给两个二维阵列
rowconditions, colconditions和一常数k,
其中rowcondition阵列
每一项[a,b]代表a会在b的上方列中,
例如b在i-th row,
a就一定只能在0-i-1 th row中,
colconditions类似,
[a,b]代表a一定在b的左边col中,
给定1-k的数字回传
k*k合乎规定的matrix,
如果条件出现矛盾则回传empty matrix.
怎么是图 干 我吐了
思路:
先想想看要如果只有一条
row的情况
就是要依照他的上下顺序关系
要找上下顺序关系
就要用Topological sort
我是用kahn's 的方法来找
kahn's 方法简单说就是
记录每个节点进入的路径 indegree
还有他们能到达的地方
然后没有路径能到
indegree=0的地方就拿去找
被找到的就 indegree -1
又=0就再拿去找
这样能够避免循环出现
因为有循环的 indegree 永远不会是0
这样可以找到他们的顺序
然后知道顺序就
两个一起找 丢进去
结束
```cpp
class Solution {
public:
vector<int> test(vector<vector<int>>& rowConditions , int k)
{
unordered_map<int,vector<int>> rowsave;
vector<int> rowind(k+1,0);
vector<int> rowint;
queue<int> rowq;
for(auto k : rowConditions)
{
rowsave[k[0]].push_back(k[1]);
rowind[k[1]]++;
}
for(int i = 1 ; i <= k ; i ++)
{
if(rowind[i]==0)rowq.push(i);
}
while(!rowq.empty())
{
int now = rowq.front();
rowq.pop();
rowint.push_back(now);
for(int k : rowsave[now])
{
rowind[k]

Links booklink

Contact Us: admin [ a t ] ucptt.com