题目:

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

思路:

git只是引入题目的一个背景,其实题目问题是:给一个多叉树,寻找多叉树上任意两点的最近共同父节点。多叉树通过邻接矩阵来表示,节点0表示根节点。

方法:寻找两点间的最近共同父节点,需要从两个节点出发,不断地往上回溯,直到找到最近的共同的父节点。那么我们需要记录每个点的父节点信息,通过该信息可以在某个节点处往上回溯,进而找到父节点。

父节点怎么记录?题目给出的是邻接矩阵,可以将邻接矩阵转为邻接链表,这样从根节点出发,即根节点入栈,然后出栈,先找到与根节点相邻的点,即树的一层(根节点为第0层),记录第二层节点的深度(即根节点+1),父节点(即根节点),然后将第二层的节点入栈,依次出栈,重复上述过程。这样就可以得到所有节点的深度和父节点信息。

代码:

class Solution {
public:
/**
* 返回git树上两点的最近分割点
*
* @param matrix 接邻矩阵,表示git树,matrix[i][j] == '1' 当且仅当git树中第i个和第j个节点有连接,节点0为git树的跟节点
* @param indexA 节点A的index
* @param indexB 节点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,-);
vector<int> depth(n,); for(int i=;i<n;i++){
for(int j=i+;j<n;j++){
if(matrix[i][j]==''){
adjList[i].push_back(j);
adjList[j].push_back(i);
}
}
} vector<int> stk;
stk.push_back();
int count=;
// depth[0]=0;
while(!stk.empty() && count<n){
int node=stk.back();
stk.pop_back();
for(int k=;k<adjList[node].size();k++){
int v=adjList[node][k];
if(parent[v]!=-)
continue;
parent[v]=node;
depth[v]=depth[node]+;
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;
}
};
 

(笔试题)小米Git的更多相关文章

  1. 笔试面试题-小米Git

    题目描述: git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常 ...

  2. 剑指Offer——小米+小红书笔试题+知识点总结

    剑指Offer--小米+小红书笔试题+知识点总结 情景回顾 时间:2016.9.23 19:00-21:00 2016.9.24 15:00-17:00 地点:山东省网络环境智能计算技术重点实验室 事 ...

  3. 2015小米暑期实习笔试题_风口的猪-中国牛市(dp)

    风口之下.猪都能飞.当今中国股市牛市,真可谓"错过等七年". 给你一个回想历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i] ...

  4. ThoughtWorks西邮暑期特训营 -- JavaScript在线笔试题

    ThoughtWorks 公司在西邮正式开办的只教女生前端开发的女子卓越实验室已经几个月过去了,这次计划于暑期在西邮内部开展面向所有性别所有专业的前端培训. 具体官方安排请戳:ThoughtWorks ...

  5. 算法笔试题整理——升级蓄水池 && 字符串数字表达式计算值 && 求旅游完所有景点需要的最少天数 && 宝箱怪

    1. 小米笔试题——升级蓄水池 题目描述: 在米兔生活的二维世界中,建造蓄水池非常简单. 一个蓄水池可以用n个坐标轴上的非负整数表示,代表区间为[0-n]范围内宽度为1的墙壁的高度. 如下图1,黑色部 ...

  6. 对Thoughtworks的有趣笔试题实践

    记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...

  7. 从阿里巴巴笔试题看Java加载顺序

    一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...

  8. 我设计的ASP.NET笔试题,你会多少呢

    本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...

  9. C#经典笔试题-获取字符串中相同的字符以及其个数

    public Dictionary<char,int> GetStrSameAs(string str){ //将字符串转换成一个字符数组. char[] charArray=str.To ...

随机推荐

  1. java集合系列之三(ArrayList)

    上一章,我们学习了Collection的架构.这一章开始,我们对Collection的具体实现类进行讲解:首先,讲解List,而List中ArrayList又最为常用.因此,本章我们讲解ArrayLi ...

  2. flex sqlite 操作blog 二进制数据

    1,              通常的操作方式: 首先我们建立表:CREATE TABLE "pages" ("id" varchar, "data& ...

  3. [转]Android使用Application总结

        目录(?)[+]   Application 配置全局Context 第一步.写一个全局的单例模式的MyApplication继承自Application 覆盖onCreate ,在这个方法里 ...

  4. POJ 1321 棋盘问题 DFS 期末前水一水就好……

    A - 棋盘问题 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Sta ...

  5. String s="hello";s+="world";s变化了吗?原始的String对象的内容变了吗?

    分析: String s="hello";s+="world"; 引用变量s 一开始指向String对象("hello" :0x001); ...

  6. Git_添加远程库

    现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举 ...

  7. HP Microserver Gen8 Processor FAQ

    http://homeservershow.com/forums/index.php?/topic/6596-hp-microserver-gen8-processor-faq/ This guide ...

  8. USB ISP(ICSP) Open Programmer < PWM ADC HV PID >

    http://sourceforge.net/projects/openprogrammer/?source=navbar Open Programmer http://openprog.alterv ...

  9. ios 中是否每一个对象(尤其是在使用多线程时),都要判断一下对象是否为nil,以防止程序闪退?

    如下所示: Class messageClass = (NSClassFromString(@"MFMessageComposeViewController")); if (mes ...

  10. Windows Server 2003 IIS设置完全篇

    一.启用Asp支持Windows Server 2003 默认安装,是不安装 IIS 6 的,需要另外安装.安装完 IIS 6,还需要单独开启对于 ASP 的支持. 第一步,启用Asp,进入:控制面板 ...