奇安信Java笔试第二题

为啥一直0%呀

package interview.qianxin;

import java.util.Scanner;

/**
 * @author Aayers-ghw
 * @date 2019/9/9 19:54
 */
public class Solution02 {

    /**
     * 二元查找树(1.若左子树不空,左子树值都小于父节点;2.如右子树不空,右子树值都大于父节点;3.左、右子树都是二元查找树;4. 没有键值相等的节点)上任意两个节点的值,请找出它们最近的公共祖先。
     * <p>
     * 输入三行行,第一行为树层级,第二行为数节点(其中-1表示为空节点),第三行为需要查找祖先的两个数。
     * <p>
     * 在例图中(虚线框没有真实节点,为了输入方便对应位置输-1)查找12和20的最近公共祖先输入为:
     * <p>
     * 4
     * <p>
     * 9 6 15 2 -1 12 25 -1 -1 -1 -1 -1 -1 20 37
     * <p>
     * 12 20
     *
     * @param args
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int n = Integer.parseInt(scanner.nextLine());
            String[] str = scanner.nextLine().split(" ");
            int[] nums = new int[str.length + 1];
            for (int i = 1; i < nums.length; ++i) {
                nums[i] = Integer.parseInt(str[i - 1]);
            }
            int m1 = scanner.nextInt();
            int m2 = scanner.nextInt();
            int cnt = 0;
            for (int i = 1; i < nums.length; ++i) {
                if (nums[i] == m1 || nums[i] == m2) {
                    cnt++;
                }
            }
            if (cnt != 2) {
                System.out.println(-1);
                return;
            }
            int index = 1;
            while (--n >= 0) {
                if (nums[index] == -1) {
                    System.out.println(-1);
                    break;
                }
                if (nums[index] == m1 || nums[index] == m2) {
                    System.out.println(nums[index]);
                    break;
                }
                if (nums[index] > Math.min(m1, m2) && nums[index] < Math.max(m1, m2)) {
                    System.out.println(nums[index]);
                    break;
                }
                if (nums[index] < Math.min(m1, m2)) {
                    index = index * 2 + 1;
                } else {
                    index = index * 2;
                }
            }
            System.out.println(-1);
        }
    }
}


#笔试题目##Java工程师#
全部评论
71% 用数组存,然后左孩子2n+1,右孩子2n+2。。。 最后不想调就直接交了
点赞 回复 分享
发布于 2019-09-09 22:29
是我看错了,你怎么每次最后都要输出一个-1呀?
点赞 回复 分享
发布于 2019-09-09 22:21
86%。。
点赞 回复 分享
发布于 2019-09-09 21:13
71%路过
点赞 回复 分享
发布于 2019-09-09 21:11
我是比较索引,a,b a始终是小的,b始终是大的
点赞 回复 分享
发布于 2019-09-09 21:10

相关推荐

nus2201602...:兄弟,你这个简历撕了丢了吧,就是一坨,去找几个项目,理解项目流程,看几遍就是你的了,看看八股就去干了,多看看牛客里别人发出来的简历,对着写,你这写的啥啊,纯一坨
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务