日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

(笔试题)小米Git

發(fā)布時間:2025/6/17 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (笔试题)小米Git 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目:

git是一種分布式代碼管理工具,git通過樹的形式記錄文件的更改歷史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程師常常需要尋找兩個分支最近的分割點,即base.假設git 樹是多叉樹,請實現(xiàn)一個算法,計算git樹上任意兩點的最近分割點。 (假設git樹節(jié)點數(shù)為n,用鄰接矩陣的形式表示git樹:字符串數(shù)組matrix包含n個字符串,每個字符串由字符'0'或'1'組成,長度為n。matrix[i][j]=='1'當且僅當git樹種第i個和第j個節(jié)點有連接。節(jié)點0為git樹的根節(jié)點。)

輸入例子:

[01011,10100,01000,10000,10000],1,2

輸出例子:

1

思路:

git只是引入題目的一個背景,其實題目問題是:給一個多叉樹,尋找多叉樹上任意兩點的最近共同父節(jié)點。多叉樹通過鄰接矩陣來表示,節(jié)點0表示根節(jié)點。

方法:尋找兩點間的最近共同父節(jié)點,需要從兩個節(jié)點出發(fā),不斷地往上回溯,直到找到最近的共同的父節(jié)點。那么我們需要記錄每個點的父節(jié)點信息,通過該信息可以在某個節(jié)點處往上回溯,進而找到父節(jié)點。

父節(jié)點怎么記錄?題目給出的是鄰接矩陣,可以將鄰接矩陣轉(zhuǎn)為鄰接鏈表,這樣從根節(jié)點出發(fā),即根節(jié)點入棧,然后出棧,先找到與根節(jié)點相鄰的點,即樹的一層(根節(jié)點為第0層),記錄第二層節(jié)點的深度(即根節(jié)點+1),父節(jié)點(即根節(jié)點),然后將第二層的節(jié)點入棧,依次出棧,重復上述過程。這樣就可以得到所有節(jié)點的深度和父節(jié)點信息。

代碼:

class Solution { public:/*** 返回git樹上兩點的最近分割點* * @param matrix 接鄰矩陣,表示git樹,matrix[i][j] == '1' 當且僅當git樹中第i個和第j個節(jié)點有連接,節(jié)點0為git樹的跟節(jié)點* @param indexA 節(jié)點A的index* @param indexB 節(jié)點B的index* @return 整型*/int getSplitNode(vector<string> matrix, int indexA, int indexB) {int n=matrix.size();vector<vector<int> > adjList(n);vector<int> parent(n,-1);vector<int> depth(n,0);for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(matrix[i][j]=='1'){adjList[i].push_back(j);adjList[j].push_back(i);}}}vector<int> stk;stk.push_back(0);int count=0; // depth[0]=0;while(!stk.empty() && count<n){int node=stk.back();stk.pop_back();for(int k=0;k<adjList[node].size();k++){int v=adjList[node][k];if(parent[v]!=-1)continue;parent[v]=node;depth[v]=depth[node]+1;stk.push_back(v);count++;}}int a=indexA;int b=indexB;while(depth[a]>depth[b])a=parent[a];while(depth[a]<depth[b])b=parent[b];while(a!=b){a=parent[a];b=parent[b];}return a;} }; ?

轉(zhuǎn)載于:https://www.cnblogs.com/AndyJee/p/4477177.html

總結(jié)

以上是生活随笔為你收集整理的(笔试题)小米Git的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。