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