小公尺麵試題 Git樹分割點

2021-07-29 21:39:12 字數 1836 閱讀 3892

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

分別倒序尋找兩個節點與根結點(0節點)的連通路。

將兩條通路進行匹配,尋找最近的分割點(兩條通路中第乙個相同的點)。

int findclosestseperatingpoint(char **gittree, int n, int pointa, int pointb)

void findpath(char **gittree, int *path, int & pathlen, int point)

pathlen++;

path[pathlen-1] = j;

i = j;

}}int match(int patha, int pathb, int pathlenofa, int pathlenofb)}}

return 0;

}

中間將尋找與根結點的通路**和

匹配兩條通路的最近分割點**封裝起來了。

//

// main.cpp

// findclosestseperatingpoint

//// created by jiajie zhuo on 2017/4/2.

//#include using namespace std;

int findclosestseperatingpoint(char **gittree, int n, int pointa, int pointb);

void findpath(char **gittree, int *path, int & pathlen, int point);

int match(int patha, int pathb, int pathlenofa, int pathlenofb);

int main(int argc, const char * argv)

}cout << "please enter the two point a and b: ";

cin >> pointa >> pointb;

closestseperatingpoint = findclosestseperatingpoint(gittree, n, pointa, pointb);

cout << "the closestseperatingpoint is " << closestseperatingpoint << endl;

for (int i = 0; i < n; ++i)

delete gittree;

return 0;

}

注:這裡已知git樹的節點數。

其中的path可以使用vector,新增元素和匹配時都會方便很多。

因為path中的元素都是倒序排列的,所以最後的match()匹配方法增加效率。

這是一道比較典型的

多叉樹的查詢問題,考查了對二維陣列的操作以及樹的鄰接矩陣的搜尋。

小公尺麵試題 手機分身,電話號碼隱藏。

小公尺麵試題 手機分身,號碼隱藏。0 9分別對應zero,one,two,nine 為保證手機撥號安全性,撥號後,存為對應的字串,並打亂順序,保證安全性。現在給定乙個字串,求最小的數字組合 例 twoone otnwoe 1212 分析 關鍵字搜尋 第一次第二次 第三次0 zero z1 one o...

golang 面試題(七)小公尺麵試題,字串

給出乙個字串s 僅含有小寫英文本母和括號 請你按照從括號內到外的順序,逐層反轉每對匹配括號中的字串,並返回最終的結果。注意,您的結果中 不應 包含任何括號。示例1 輸入 s abcd 輸出 dcba 示例2 輸入 s u love i 輸出 iloveu s uevoli iloveu 示例3 輸入...

小公尺麵試題 朋友圈問題 並查集

假如已知有n個人和m對好友關係 存於數字r 如果兩個人是直接或間接的好友 好友的好友的好友.則認為他們屬於同乙個朋友圈,請寫出程式求出這n個人裡一共有多少朋友圈。例如 n 5,m 3,r 表示有5個人,1和2是好友,2和3是好友,4和5是好友。則1,2,3屬於乙個朋友圈,4,5屬於另乙個朋友圈,結果...