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};
}
};
相關文章
- 演算法題——冗餘連線演算法
- 網路冗餘技術
- 如何刪除Git倉庫中冗餘的tag?Git
- 機器學習中如何用篩選器檢測冗餘?機器學習
- 修改ASM磁碟組冗餘模式ASM模式
- 廉價冗餘磁碟陣列陣列
- 找出冗餘索引的指令碼索引指令碼
- 託管資料中心:考慮安全性、冗餘性與連線性等諸多事項
- 細說 Azure Storage 的冗餘策略
- MySQL 冗餘和重複索引薦MySql索引
- Linked List Cycle leetcode II java (尋找連結串列環的入口)LeetCodeJava
- Solaris 11 中 Oracle RAC 私網冗餘模式從HAIP到IPMPOracle模式AI
- 資料庫設計——冗餘欄位資料庫
- 如何消除冗餘資料的安全風險?
- FHRP - 閘道器冗餘協議協議
- 虛擬路由冗餘協議VRRP路由協議VR
- ASM可以更改冗餘度&增加failgroup嗎?ASMAI
- MSSQL冗餘欄位的策略和管理SQL
- 連結串列找環(python實現)Python
- 資料庫設計之欄位冗餘資料庫
- 沒有理由在分散式系統中反對冗餘 (馬克)分散式
- RMAN備份中冗餘度和Obsolete的備份的關係
- hadoop之 心跳時間與冗餘快清除Hadoop
- iOS專案冗餘資源掃描指令碼iOS指令碼
- 小白讀iOS冗餘資源掃描指令碼iOS指令碼
- 使用Addressables+SpriteAtlas打包產生冗餘
- win10如何刪去多餘的本地連線_win10刪除多餘本地連線的方法Win10
- LeetCode題解(面試02.08):尋找連結串列與環的交點(Python)LeetCode面試Python
- SAP CRM Fiori應用冗餘round trip的原因分析
- 詳解分散式系統本質:“分治”和“冗餘”分散式
- VRRP-虛擬路由器冗餘協議VR路由器協議
- VS Code 正則匹配(冗餘程式碼批量清理方法)
- 資料鏈路層迴圈冗餘(CRC)檢驗
- 去除冗餘 – 精簡您的CSS樣式程式碼CSS
- CRC冗餘校驗碼的介紹和實現
- 優化C++程式碼(4):消除冗餘程式碼優化C++
- 臺達變頻透過Modbus轉Profinet閘道器可以在環網冗餘中使用
- Vue 高德地圖 API Loca 如何使用 連線線圖層、脈衝連線圖層Vue地圖API