一道91%,一道AC,求第一道AC思路

奇安信笔试
第一道 91% 题目要求求进程树,我的思路是用队列存放输入的父节点,a数组放进程,b数组放a的父节点,然后循环遍历b数组。每次遍历b时,如果b中元素==队头元素,a数组中对应元素入队,(结果)sum++;每次遍历完b,出队。
持续上述操作直到队列为空。但是为什么,就是少了9%的数据。
第二道,AC。思路是,不用受题目影响强行用树。用数组保存,然后可以找到输入的数在数组中的下标(为了方便,统一从1开始)。我们可以画一颗树观察一下发现(根节点从下标1开始),每个结点的下标除以2,得到其父节点下标(得到这个就行了)。
大概图是这样(笔试时画的,见谅)

然后我们求输入两个节点在那一层。这种满二叉树很好求层数的。如果不在同一层,层数高的节点,下标不停除以2(相当于不停找父节点)。直到层数一样,观察两个结点下标是否相等,不相等,两个节点再除以2.
#奇安信##笔试题目#
全部评论
第一题91是有可能不存在这个进程,所以需要输出0
点赞 回复 分享
发布于 2019-09-09 20:51
第一题我是用hashmap+递归做的,key存的pid,value存的ppid,每次都遍历了一遍hash表找有没有父进程是上一个子进程的进程。。😂
点赞 回复 分享
发布于 2019-09-09 23:46
第二道题就是最小堆最大堆的数组找父节点的思路。
点赞 回复 分享
发布于 2019-09-09 20:49
package company.qianxin.pro1; import java.util.Scanner; /**  * @author tortoiselala  */ public class Main {     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         String line = in.nextLine();         String[] lineSpiltResult = line.split(" ");         int[] pid = new int[lineSpiltResult.length];         int idx = 0;         for (String e : lineSpiltResult) {             pid[idx++] = Integer.valueOf(e);         }         idx = 0;         line = in.nextLine();         lineSpiltResult = line.split(" ");         int[] ppid = new int[lineSpiltResult.length];         for (String e : lineSpiltResult) {             ppid[idx++] = Integer.valueOf(e);         }         int x = in.nextInt();         System.out.println((isIn(x, pid, ppid) ? 1 : 0) + compute(x, ppid, pid));     }     public static int compute(int x, int[] ppid, int[] pid) {         int re = 0;         for (int i = 0; i < ppid.length; i++) {             if (ppid[i] == x) {                 re += 1 + compute(pid[i], ppid, pid);             }         }         return re;     }     public static boolean isIn(int a, int[] pid, int[] ppid) {         for (int e : pid) {             if (a == e) {                 return true;             }         }         for (int e : ppid) {             if (a == e) {                 return true;             }         }         return false;     } } /* 3 1 5 21 10 0 3 3 1 5 3  */
点赞 回复 分享
发布于 2019-09-09 20:55
进程不存在输出0
点赞 回复 分享
发布于 2019-09-09 20:59
我咋跟你做的不一样。。。
点赞 回复 分享
发布于 2019-09-09 21:19
有代码分享吗?😂
点赞 回复 分享
发布于 2019-09-09 21:37
import java.util.*; public class Main {     public static void main(String[] args) {         Scanner sc = new Scanner(System.in);         while (sc.hasNext()) {             int n = sc.nextInt();             int len = (int) (Math.pow(2, n) - 1);             int[] a = new int[len];             for (int i = 0; i < a.length; i++)                 a[i] = sc.nextInt();             int one = sc.nextInt();             int two = sc.nextInt();             int indexOne = -1;             int indexTwo = -1;             for (int i = 0; i < len; i++) {                 if (a[i] == -1)                     continue;                 if (a[i] == one)                     indexOne = i;                 if (a[i] == two)                     indexTwo = i;             }             if (indexOne == -1 || indexTwo == -1)                 System.out.println(-1);             else {                 indexOne = Math.min(indexOne, indexTwo) + 1;                 indexTwo = Math.max(indexOne, indexTwo) + 1;                 int cenOne = 0;                 int cenTwo = 0;                 int temSum = 0;                 for (int i = 0; i < n; i++) {                     int now = (int) Math.pow(2, i);                     if (temSum < indexOne && (temSum + now) >= indexOne)                         cenOne = i + 1;                     if (temSum < indexTwo && (temSum + now) >= indexTwo)                         cenTwo = i + 1;                     temSum += now;                 }                 while (cenOne != cenTwo) {                     cenTwo--;                     indexTwo /= 2;                 }                 while (indexOne != indexTwo) {                     indexOne /= 2;                     indexTwo /= 2;                 }                 System.out.println(a[indexOne - 1]);             }         }     } }
点赞 回复 分享
发布于 2019-09-09 21:45

相关推荐

冲芭芭拉鸭:你这图还挺新,偷了。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
1
13
分享
牛客网
牛客企业服务