小米Git
来源:互联网 发布:如何查询域名的有效期 编辑:程序博客网 时间:2024/06/10 12:04
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树的根节点。)
题目意思:
找最近双亲问题 思想:找到indexA到0(根节点)的路径如:4->5->2->0 ; 再找到indexB到0(根节点)的路径如:1->2->0;找到两个路径后,从后往前,找到第一个两个路径不同的结点5与1,那么后一个结点2就是最近分割点。(其中:找路径用递归来解决,用一个visited数组记录结点是否被访问过,结束条件是:这个结点为0(根节点);)
结题思路:
多叉树寻找最近公共父节点问题
解题思路
从矩阵构造出father数组,father数组保存每个节点的父节点。
记录从根节点到带求节点A和B的路径。
比较路径,找到最近的公共节点。
技巧
由于矩阵给的双向关系,构造father数组时,需要从根节点0开始,从上层往下层构造。
用双向队列记录根节点到本节点的路径,双向队列可以往对头加节点,也可以从对头取节点。
class Solution{public: int getSplitNode(vector<string> matrix, int indexA, int indexB) { queue<int> que; que.push(0); vector<int> father(matrix.size(), -1); vector<bool> flag(matrix.size(), false); flag[0] = true; while (!que.empty()) { int i = que.front(); que.pop(); for (int j = 0; j < matrix.size(); j++) { if (matrix[i][j] == '1' && !flag[j]) { que.push(j); //数组保存的父节点 ,j的父节点是i father[j] = i; flag[j] = true; } } } int pa = indexA; int pb = indexB; deque<int> pathA; deque<int> pathB; while (pa!=-1) { pathA.push_front(pa); pa = father[pa]; } while (pb != -1) { pathB.push_front(pb); pb = father[pb]; } int common=0; while (!pathA.empty() && !pathB.empty() &&pathA.front()==pathB.front()) { common = pathA.front(); pathA.pop_front(); pathB.pop_front(); } return common; }};
阅读全文
0 0
- 小米 小米Git
- 小米Git
- 小米Git
- 小米Git
- 小米Git
- 小米Git
- 小米Git
- 小米Git
- 小米Git
- 小米笔试题-小米Git
- 2016小米-小米Git-Java
- 算法题-小米Git
- 算法: 小米Git
- [编程题]小米git
- 小米git笔试题
- [小米面试题]小米Git
- 牛客网---2016---小米Git
- 小米Git问题-学习笔记
- 扩增子图表解读6韦恩图:比较组间共有和特有OTU或分类单元
- Binder解析
- HDU 1713 相遇周期 — 欧几里得算法与最大公约数,最小公倍数
- iOS UICollectionView详解
- 在Docker Toolbox 终端中使用 vboxmanage.exe 程序在宿主机和虚拟机之间创建共享目录
- 小米Git
- 数学归纳法在数据结构与算法分析设计中的应用
- HDU 1455 Sticks(dfs+强剪枝)
- HDU5456 Matches Puzzle Game[数位DP]
- 复数类:class Complex
- 熊大UWB系列教程一: DW1000 超宽带系统简介及最小系统搭建
- 基于websocket协议的即时通讯webapp(摘自本人毕业论文)
- CSS长度值表示方法
- JDK-jstack工具 CPU使用情况