这道题目摘自九章算法   https://www.jiuzhang.com/article/6ai0yN/

题目是

输入与输出

这个题目本质上就是删除一个使该图内部成环的一条边,使整个图中不存在环。

这个题目我认为原文的解释有点复杂,最快的方法就是操作数组,角标代表一个顶点,角标所对应的数组的数值代表一个顶点,而角标到该角标数值的对应,我们认为是角标代表的顶点到这个数值代表的顶点的一个连接。

而我们要做的,就是将输入的边连接的顶点,通过一个数组表示出来。

具体的过程可以参考一本国外的算法书,叫 algorithm。

其中的quick find 和quick union 讲的就是怎么要操作数组来表示一棵树

然后我抽空写了一个代码小样:

package FinalStruggle;/*** Created by zhoumeng on 2018/3/18.*/
public class ExtraEdge {public static void main(String[] args){int[][] que = {{1,2},{2,3},{3,4},{1,4},{1,5}};int[] extra = findExtraEdge(que);if (extra==null){System.out.println("404");}else{System.out.println("{"+extra[0]+", "+extra[1]+"}");}}private static int[] findExtraEdge(int[][] que){int N = que.length;int [] vertexes = new int[N+1];for (int i = 1; i<=N; i++){vertexes[i] = i; // every vertex connects itself initially}for(int[] edge: que){int left = edge[0];int right = edge[1];// now we need to find the circleint l_root = findRootNode(vertexes, left);int r_root = findRootNode(vertexes, right);if (l_root==r_root){return edge;}else{vertexes[l_root] = vertexes[r_root];}}return null;}private static int findRootNode(int[] vertexes, int index) {while (vertexes[index]!=index){index = vertexes[index];}return index;}
}

其中, findRootNode 和原文中的想法有点不一样。

在原文中,他用了一个递归,通过每次将得到的root值返回赋予当前节点这个操作,我们可以把所有连接到相同根结点角标所对应的值,都改成该根结点的角标值,这样方便之后的查找工作。

但是,这样有个缺点就是,我们没有办法知道整个树的层次,只能知道某个节点的根结点,所以代码解决的问题比较专项。

至于两相比较,时间复杂度的问题,原链接中给的代码,通过每次查询都进行值的更改,来获取下一次查询的最优状态,所以原数组的时间复杂度很稳定。我的代码,可能会形成比较深的树,在之后多次重复查询的过程中,可能会更加耗时一些。至于非常精确的时间计算,可以参考我刚才提到的algrithm一书,我记得上边给出了调用方法消耗的时间,更改数值消耗的时间和查询一次需要的时间。

因为手头暂时没有资料,而且最近真的好忙,所以没有给出具体的数据。

Google面试题 图论的问题相关推荐

  1. Google 面试题和详解

    Google的面试题在刁钻古怪方面相当出名,甚至已经有些被神化的味道.这个话题已经探讨过很多次,而科技博客 BusinessInsider这两天先是贴出15道Google面试题并一一给出了答案,其中不 ...

  2. 【Google面试题】有四个线程1、2、3、4同步写入数据…C++11实现

    Google面试题 有四个线程1.2.3.4.线程1的功能就是输出1,线程2的功能就是输出2,以此类推-现在有四个文件ABCD.初始都为空.现要让四个文件呈如下格式: A:1 2 3 4 1 2- B ...

  3. Google面试题之100层仍两个棋子

    一道Google面试题,题目如下:"有一个100层高的大厦,你手中有两个相同的玻璃围棋子.从这个大厦的某一层扔下围棋子就会碎,用你手中的这两个玻璃围棋子,找出一个最优的策略,来得知那个临界层 ...

  4. Google面试题:找几百亿数据的中值

    Google面试题:找几百亿数据的中值 http://blog.csdn.net/jiyanfeng1/article/details/8088237 有几百亿的整数,分布的存储到几百台通过网络连接的 ...

  5. google面试题,生男生女比例?

    Google面试题: 在一个重男轻女的国家里,每个家庭都想生男孩,如果他们生的孩子是女孩,就再生一个,直到生下的是男孩为止,这样的国家,男女比例会是多少? 答案:1:1 分析:  出生男女概率是50% ...

  6. 扔玻璃球 [ Google面试题 ]

    这是一道 Google 面试题,考察的是对于 粗调 和 精调 工程思维 对于扔玻璃球国内也叫扔鸡蛋. ta不用您有什么基础,只需要一个基本工程思维. 粗调和精调,这个已是统计学里最优法,所以不用担心复 ...

  7. 赌5毛钱,你解不出这道Google面试题

    作者 | Kevin Ghadyani 译者 | 清儿爸 编辑 | Rachel 出品 | AI科技大本营(ID:rgznai100) 为了更了解其他人对软件工程的看法,我开始疯狂在 YouTube ...

  8. 【奇葩面试题】因为太难而被禁用的17道Google面试题

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mcfnhm/article/details/80923586 即使是最成功的公司,它的招聘过程有时也 ...

  9. 两个鸡蛋--一道Google面试题

    前两天翻译Python文档翻译到手软.今天不想翻译了,上网闲逛,在http://programming.reddit.com/ 上看到一道有趣的题目,据说是清华东门某家公司的面试题.原文地址http: ...

最新文章

  1. 5 门前途美好的编程语言
  2. mac下Android studio配置gradle的路径
  3. 与老外交谈的常用句子
  4. centos7 systemctl status servicename执行慢的问题
  5. 更优雅的在 Xunit 中使用依赖注入
  6. Sql Server全局变量(转)
  7. Android 开发笔记___Activity的生命周期
  8. PPG血氧饱和度计算
  9. python安装计算机丢失api_Python安装后提示api-ms-win-crt-runtime-|1-1-0.dll丢失
  10. 2017.6.4 入门组 NO.4——猜数
  11. 使用Cgroup在Docker中进行资源管理
  12. 华南师范大学 计算机学院 赵,罗子颖 计算机学院
  13. 蓝桥杯试题 算法提高 Cutting Chains
  14. 【Python】Matplotlib绘图02_pyplot图表美化
  15. 苹果cms V8/V10定时任务百度主动URL推送设置教程 配合宝塔定时计划任务
  16. cad应用技巧:图层特性管理器
  17. WINCE 实用技巧 之 创建快捷方式详解
  18. 新一代三维GIS技术在交通行业的创新应用
  19. Day 29 - AWS Lambda 接收参数查询 Dynamodb
  20. 从模拟信号到数字信号

热门文章

  1. 游戏汉化教程1-汉化流程
  2. 【Bio】基础生物学 - 含碳、氧、氮、磷、硫官能团 functional group
  3. Word如何选中所有图片
  4. 计算机冷知识科普,【科普冷知识】有趣的8个科学冷知识,让你大吃一惊
  5. 位于东京丰洲“可在水中穿行的展览馆”teamLab Planets现已成为秋季展览空间。水面游动的锦鲤碰到参观者后会变成秋叶。
  6. html查看详情,查看详情页.html
  7. 【LeetCode】453. 最小操作次数使数组元素相等
  8. 有没有比较好的建站系统可推荐?
  9. 神经注意力蒸馏NAD
  10. Python绘制温度变化曲线