題目描述:
git是一種分布式**管理工具,git通過樹的形式記錄檔案的更改歷史,比如: base'<--base<--a<--a' ^ | --- b<--b' 小公尺工程師常常需要尋找兩個分支最近的分割點,即base.假設git 樹是多叉樹,請實現乙個演算法,計算git樹上任意兩點的最近分割點。 (假設git樹節點數為n,用鄰接矩陣的形式表示git樹:字串陣列matrix包含n個字串,每個字串由字元'0'或'1'組成,長度為n。matrix[i][j]=='1'當且僅當git樹種第i個和第j個節點有連線。節點0為git樹的根節點。)
輸入例子:
[01011,10100,01000,10000,10000],1,2
輸出例子:
1
class solution }}
// 用於廣度遍歷此多叉樹,這裡是類似棧的結構
vectorstk;
// 存入根節點
stk.push_back(0);
// 根節點的深度置為0
dep[0] = 0;
// 類似廣度遍歷此多叉樹
while (not stk.empty())
// v的父節點是u
fa[v] = u;
// v的深度為其父節點深度+1
dep[v] = dep[u] + 1;
// 將v入棧
stk.push_back(v);}}
// 尋找a和b的最近分割點
int a = indexa, b = indexb;
// 將a和b回溯到相同高度
while(dep[a] > dep[b])
while(dep[a] < dep[b])
// 尋找最近分割點
while(a != b)
return a;
}};
程式設計題 小公尺git
題目描述 git是一種分布式 管理工具,git通過樹的形式記錄檔案的更改歷史,比如 base base a a b b 小公尺工程師常常需要尋找兩個分支最近的分割點,即base.假設git 樹是多叉樹,請實現乙個演算法,計算git樹上任意兩點的最近分割點。假設git樹節點數為n,用鄰接矩陣的形式表示...
小公尺二面手撕演算法題
今天參加小公尺二面,面試官讓手撕一道演算法題,感覺這道演算法題挺有意義的,所以還是分享出來。題目如下 這道題目的思路可能會很簡單,但是裡面的細節可能會要重視一下,我自己寫的 如下,能夠全部通過。話不多說,直接上 public static void main string args else sb1...
小公尺程式設計題
乙個工廠製造的產品形狀都是長方體,它們的高度都是h,長和寬都相等,一共有六個型號,他們的長寬分別為1 1 2 2 3 3 4 4 5 5 6 6。這些產品通常使用乙個 6 6 h 的長方體包裹包裝然後郵寄給客戶。因為郵費很貴,所以工廠要想方設法的減小每個訂單運送時的包裹數量。他們很需要有乙個好的程式...