2020年奇安信校招JAVA岗笔试
二元查找树(1.若左子树不空,左子树值都小于父节点;2.如右子树不空,右子树值都大于父节点;3.左、右子树都是二元查找树;4. 没有键值相等的节点)上任意两个节点的值,请找出它们最近的公共祖先。
输入
三行,第一行为树层级,第二行为数节点(其中-1表示为空节点),第三行为需要查找祖先的两个数。
在例图中(虚线框没有真实节点,为了输入方便对应位置输-1)查找12和20的最近公共祖先输入为:
4
9 6 15 2 -1 12 25 -1 -1 -1 -1 -1 -1 20 37
12 20
输出
输出给出两个数在树上的最近公共祖先数值,如果没有公共祖先,输出-1;如果其中一个节点是另一个节点的祖先,输出这个祖先点(如例图中找15、20最近公共祖先,输出15);如果输入无效,输出-1。
样例输入
4
9 6 15 2 -1 12 25 -1 -1 -1 -1 -1 -1 20 37
12 20
样例输出
15
解题代码
import java.util.Scanner;
import java.util.Stack;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int high = in.nextInt();if (high == 0) {System.out.println(-1);return;}int numOfNode = (int) (Math.pow(2, high) - 1);int[] tree = new int[numOfNode + 1];for (int i = 1; i <= numOfNode; i++) {tree[i] = in.nextInt();}int n1 = in.nextInt();int n2 = in.nextInt();int index1 = 0;int index2 = 0;int count = 0;for (int i = 1; i <= numOfNode; i++) {if (n1 == tree[i]) {index1 = i;count++;}if (n2 == tree[i]) {index2 = i;count++;}}if (count != 2) {System.out.println(-1);return;}Stack<Integer> stack1 = getPath(index1, tree);Stack<Integer> stack2 = getPath(index2, tree);int res = -1;while (!stack1.isEmpty() && !stack2.isEmpty() && stack1.peek().equals(stack2.peek())) {res = stack1.pop();stack2.pop();}System.out.println(res);}private static Stack<Integer> getPath(int index, int[] tree) {Stack<Integer> stack = new Stack<>();while (index / 2 != 0) {stack.push(tree[index]);index = index / 2;}stack.push(tree[1]);return stack;}
}
2020年奇安信校招JAVA岗笔试相关推荐
- 背包问题 2020年小米校招JAVA岗笔试第二题
对于背包问题:例如小偷东西问题 如上图 小偷最多可以带走重量位20.要尽可能带走多的商品. 所以应该设置数组capacity[20+1], 商品itmes [5+1] 其中,capacity[0]=0 ...
- 2020年旷世校招JAVA岗笔试第二题
字符串长度 题目描述: 给定一个只包含小写英文字母的字符串以及一个常数 k,求字符串最长的包含不超过 k 种字母的子串的长度. 例如,给定字符串 abaabccbbbdddddda,k = 3,这时 ...
- 2020年旷世校招JAVA岗笔试第一题
1的个数 题目描述: 给定非负整数n,输出它的二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1.因此,如果n=9,则输出2. 输入 一行非负整数n,n最大不超过32位有符号整数的最大 ...
- 2020年快手校招JAVA岗笔试第三题
题目描述: 将两个内容合并,每次,取第一行四个,取第二行5个.把多余的直接补在最后即可. 解题代码 import java.util.Scanner;public class Main_3 {publ ...
- 2020年快手校招JAVA岗笔试第二题
解题代码 import java.util.HashSet; import java.util.Scanner; import java.util.Set;public class Main {pub ...
- 2020年快手校招JAVA岗笔试第一题
解题办法: import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc ...
- 奇安信校招面试题来啦
防范常见的 Web 攻击 一.什么是 SQL 注入攻击 攻击者在 HTTP 请求中注入恶意的 SQL 代码,服务器使用参数构建数据库 SQL 命令时,恶意SQL 被一起构造,并在数据库中执行. 用户登 ...
- 2020年小米校招JAVA岗笔试第二题
题目描述: 小米之家有很多米粉喜欢的产品,产品种类很多,价格也不同.比如某签字笔1元,某充电宝79元,某电池1元,某电视1999元等 假设库存不限,小明去小米之家买东西,要用光N元预算的钱,请问他最少 ...
- 用友2020校招java笔试题_2020年快手校招JAVA岗笔试第三题-Go语言中文社区
题目描述: 将两个内容合并,每次,取第一行四个,取第二行5个.把多余的直接补在最后即可. 解题代码 import java.util.Scanner; public class Main_3 { pu ...
最新文章
- [导入]Java线程的深入探讨
- 3创建型模式之单例模式
- PL/Sql Dev 调试Oracle存储过程、触发器、函数
- Table options do not contain an option key ‘connector‘ for discovering a connector
- 问题:使用jdk11 报错:java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present
- vue 双向数据绑定
- 实习成长之路:设计模式一:为什么你明明使用面向对象设计语言总写面向过程的程序?
- 浅谈 JNIEnv 和 JavaVM
- 2018 蓝桥杯 C++ A组 1-7
- 我的第一本书《FFmpeg音视频开发基础与实战》已正式出版
- python繁简体转换
- 数组排序 向大佬低头 时间算法
- 微信小程序使用函数的三种方法
- 效率最高的两种项目沟通方式
- 陈绮贞 《吉他手》 吉他谱子 图片+文字
- Portainer的下载与安装
- 【微信小程序】一文带你吃透小程序开发框架——视图层中的事件系统
- 天融信AlphaFuzzer测试工具 使用教程
- 100人局域网(企业)至少需要多少带宽?
- Android 录音实现(AudioRecord)
热门文章
- C语言fputs()函数(把字符串写入到指定的流 stream (文件指针)中)
- Intel Realsense D435 报错 Couldn't resolve requests
- tensorflow教程 开始——Premade Estimators(预制评估器)
- python 面向对象的篮球技巧训练实现
- pycharm Enable Live Templates的作用
- 绝命沙虫 精度,double,模拟 牛客白月赛44
- js动态生产html元素,js 动态创建 html元素
- Java动态代理详解(Proxy+InvocationHandler)
- HIve学习:Hive分区修改
- spring boot 微服务集群 + 注册中心