(笔试题)小米Git
题目:
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,-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;} };
转载于:https://www.cnblogs.com/AndyJee/p/4477177.html
(笔试题)小米Git相关推荐
- 2019 小米校招笔试题 小米大礼包
小米之家是成人糖果店.里面有很多便宜,好用,好玩的产品.中秋节快到了,小米之家想给米粉们准备一些固定金额大礼包.对于给定的一个金额,需要判断能不能用不同种产品(一种产品在礼包最多出现一次)组合出来这个 ...
- 小米运维部14年校招笔试题A的个人答案
15年准备实习生面试时答的题,仅供参考 具体题目详见 http://www.tuicool.com/articles/eYRZBr http://noops.me/?p=1154 一.linux基础 ...
- 【求职】小米 2018 秋招测试开发工程师笔试题
小米 2018 秋招测试开发工程师笔试题 一.单选题 1.静态变量static 在不同的实例中地址是否一样?他们储存在什么区域?( ) A. 地址一样,在堆栈区. B. 地址不一样,在堆栈区. C. ...
- 【2022小米秋招(2023校招)】软件开发方向 笔试题1——链表反转
题目: 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 left 到位置 right 的链表节点,返回反转后的链表. 输 ...
- 2018年腾讯校招和小米校招本人所做笔试题——前端Web开发工程师方向
本人愚笨,刚开始对笔试题并不是很了解.仅以此两家为学习的地方,待日后希望更好.现在就把这两家的我记录下来的笔试题整理起来.小米的内容在后,有详细的解答! 腾讯:感觉上腾讯的题目是偏难一点的,不亏是鹅厂 ...
- 小米校园招聘笔试题--括号智能纠错
一 问题描述: 二 解题思路: 因为要对括号序列进行插入操作,所以选择链表作为序列的数据结构,在判断括号序列是否合法时,要用到堆栈,所以选择堆栈用以存放左半括号 三 代码: /* This is a ...
- 剑指Offer——小米+小红书笔试题+知识点总结
#剑指Offer--小米+小红书笔试题+知识点总结 ##情景回顾 时间:2016.9.23 19:00-21:00 2016.9.24 15:00-17:00 地点:山东省网络环境智能计算技术重点实验 ...
- 前端笔试题面试题记录(下)
前言 接上篇前端笔试题面试题记录(上).趁清明小长假,把上篇剩下的部分也写一下,因为最近比较忙这篇已经拖了很久了.现在刚刚开始银四了,应该还是有些小伙伴在找工作,时间还不算太晚,希望本篇可以帮到这些小 ...
- IC验证笔试题(寒武纪)
寒武纪笔试题 请简述:定宽数组.动态数组.关联数组和队列四种数据类型的各自特点. 数据类型 物理内存 索引 固定数组 编译时创建,之后不能修改 数字 动态数组 仿真时创建,仿真期间可以改变 数字 队列 ...
最新文章
- 程序员每天工作摸鱼俩小时,月薪35K?
- 附录5:TensorFlow基础(一)
- 【Java 虚拟机原理】栈帧 | 局部变量表 | 操作数栈 | 方法出口 | JVM 指令逐条解析
- mysql canal 安装测试_canal安装配置与mysql操作监听,我已经帮你踩过了所有的坑...
- JQuery Ajax调用asp.net后台方法
- MySQL的启动脚本
- 为什么说苏宁必买万达百货
- HTML基础教程笔记(HTML5与CSS3基础教程书)
- Java六种异常处理的陋习
- 基于Mplayer的嵌入式流媒体播放器的设计与实现
- Boss直聘怎么写出优秀的简历?
- #9733;为什么不要和“穷人”做朋友?
- 解决vue项目中prettier、eslint格式冲突问题
- (BAT批处理)批处理命令怎么校验文件MD5哈希值?
- C++常用STL库详细总结
- p2p半分布式开源项目调研:
- 印第安纳大学校庆超算,使用下一代 N 卡,速度达 6 千万亿次/秒
- [Python]-Wechat工具
- Windows terminal 分屏
- 如何绕过开机密码开启计算机,win10系统怎么绕过开机密码_win10系统绕过开机密码的两种方法...