leetcode 684. 冗餘連線(圖中找環)
在本問題中, 樹指的是一個連通且無環的無向圖。
輸入一個圖,該圖由一個有著N個節點 (節點值不重複1, 2, …, N) 的樹及一條附加的邊構成。附加的邊的兩個頂點包含在1到N中間,這條附加的邊不屬於樹中已存在的邊。
結果圖是一個以邊組成的二維陣列。每一個邊的元素是一對[u, v] ,滿足 u < v,表示連線頂點u 和v的無向圖的邊。
返回一條可以刪去的邊,使得結果圖是一個有著N個節點的樹。如果有多個答案,則返回二維陣列中最後出現的邊。答案邊 [u, v] 應滿足相同的格式 u < v。
輸入: [[1,2], [1,3], [2,3]]
輸出: [2,3]
思路:
就是找父節點以及合併兩個節點的過程
優化
藉助一個rank,這個rangk代表節點的高度(可以這麼理解),將小的高度節點嫁接到高的節點上面。
程式碼
class Solution {
private:
vector<int> parent;
vector<int> rank;
int find_parent(int x)
{
int x_root=x;
while(parent[x_root]!=-1)
{
x_root=parent[x_root];
}
return x_root;
}
bool Union(int x,int y)
{
int x_root=find_parent(x);
int y_root=find_parent(y);
if(x_root==y_root)
{
return false;
}
//優化,防止形成的鏈太長
if(rank[x_root]>rank[y_root])
{
parent[y_root]=x_root;
}
else if(rank[x_root]<rank[y_root])
{
parent[x_root]=y_root;
} else if(rank[x_root]==rank[y_root])
{
parent[x_root]=y_root;
rank[y_root]++;
}
return true;
}
public:
vector<int> findRedundantConnection(vector<vector<int>>& edges) {
vector<int> ret_v;
int mi;
int mj;
int N=edges.size();
parent=vector<int> (N+1,-1);//剛開始父節點都是-1
rank=vector<int>(N+1,1);//剛開始每個節點的高度預設為1
for(int i=0;i<edges.size();i++)
{
if(Union(edges[i][0],edges[i][1])==false)
{
mi=edges[i][0];
mj=edges[i][1];
}
}
return ret_v=vector<int>{mi,mj};
}
};
相關文章
- 演算法題——冗餘連線演算法
- Hibernate/JPA中避免save()冗餘呼叫
- 每天一道leetcode142-尋找連結串列中環的入口LeetCode
- 網路冗餘技術
- 如何刪除Git倉庫中冗餘的tag?Git
- 託管資料中心:考慮安全性、冗餘性與連線性等諸多事項
- [20210419]避免冗餘的輸出.txt
- FHRP - 閘道器冗餘協議協議
- 不同廠家的工業交換機如何組建環網冗餘?
- LeetCode題解(面試02.08):尋找連結串列與環的交點(Python)LeetCode面試Python
- 資料庫設計——冗餘欄位資料庫
- 使用Addressables+SpriteAtlas打包產生冗餘
- 連結串列找環(python實現)Python
- 如何消除冗餘資料的安全風險?
- 資料庫設計之欄位冗餘資料庫
- 沒有理由在分散式系統中反對冗餘 (馬克)分散式
- VRRP-虛擬路由器冗餘協議VR路由器協議
- 臺達變頻透過Modbus轉Profinet閘道器可以在環網冗餘中使用
- 詳解分散式系統本質:“分治”和“冗餘”分散式
- SAP CRM Fiori應用冗餘round trip的原因分析
- VS Code 正則匹配(冗餘程式碼批量清理方法)
- win10如何刪去多餘的本地連線_win10刪除多餘本地連線的方法Win10
- LeetCode 389——找不同LeetCode
- Leetcode-142. 環形連結串列 IILeetCode
- LeetCode-142-環形連結串列 IILeetCode
- 冗餘資料一致性,到底如何保證?
- 資料庫效能優化之冗餘欄位的作用資料庫優化
- CRC(迴圈冗餘校驗)和CBC(密碼塊鏈)密碼
- 一文全懂:獨立冗餘磁碟陣列(RAID)陣列AI
- 有一些冗餘程式碼, 只是實現了功能
- Java-Annotation的一種用法(消除程式碼中冗餘的if/else或switch語句)Java
- LeetCode-389-找不同LeetCode
- 每日leetcode——142. 環形連結串列 IILeetCode
- LeetCode題解(Offer22):尋找連結串列中倒數第k個節點(Python)LeetCodePython
- Vue 高德地圖 API Loca 如何使用 連線線圖層、脈衝連線圖層Vue地圖API
- LeetCode 1640.能否連線形成陣列LeetCode陣列
- 連結串列找環方法證明(拒絕誤人子弟)
- LeetCode-162-尋找峰值LeetCode