奇安信Java服务端

1、终止进程,过了91%,有点并查集思想
    private static int count = 1;
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        String[] pid = bufferedReader.readLine().split(" ");
        String[] ppid = bufferedReader.readLine().split(" ");
        int killp = Integer.parseInt(bufferedReader.readLine());
        int max = 0;
        for(int i=0;i<pid.length;i++){
            if(Integer.parseInt(pid[i])>max){
                max = Integer.parseInt(pid[i]);
            }
        }

        int[] array = new int[max+1];
        Arrays.fill(array,-1);
        for(int i=0;i<ppid.length;i++){
            array[Integer.parseInt(pid[i])] = Integer.parseInt(ppid[i]);
        }
        find(array,killp);

        System.out.println(count);
    }

    private static void find(int[] array,int i){
        for(int j=0;j<array.length;j++){
            if(array[j]==i){
                count++;
                array[j]=-1;
                find(array,j);
            }
        }
    }
2、找祖父节点AC,leetcode有原题
   static class TreeNode{
        int val;
        TreeNode left = null;
        TreeNode right = null;
        TreeNode(int val){
            this.val = val;
        }
    }

    private static TreeNode buildtree(TreeNode node,int val){
        if(node == null){
            node = new TreeNode(val);
        }else if(val<node.val){
            node.left = buildtree(node.left,val);
        }else{
            node.right = buildtree(node.right,val);
        }

        return node;
    }
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        int level = Integer.parseInt(bufferedReader.readLine());
        String[] mynode = bufferedReader.readLine().split(" ");
        String[] findnode = bufferedReader.readLine().split(" ");
        if(Integer.parseInt(findnode[0])==0||Integer.parseInt(findnode[1])==0)
            System.out.println(-1);
        else{
            int flag = 0;
            for(int i=0;i<mynode.length;i++){
                if(Integer.parseInt(mynode[i])==Integer.parseInt(findnode[0])||Integer.parseInt(mynode[i])==Integer.parseInt(findnode[1]))
                    flag++;
            }
            if(flag==2){
                TreeNode root = new TreeNode(Integer.parseInt(mynode[0]));
                for(int i=1;i<mynode.length;i++)
                    buildtree(root,Integer.parseInt(mynode[i]));
                int res = findroot(root,Integer.parseInt(findnode[0]),Integer.parseInt(findnode[1]));
                System.out.println(res);
            }else{
                System.out.println(-1);
            }
        }
    }

    private static int findroot(TreeNode root,int val1,int val2){
        if(root==null)
            return -1;
        if(root.val==val1||root.val==val2)
            return root.val;

        int left = findroot(root.left,val1,val2);
        int right = findroot(root.right,val1,val2);

        if(left==-1&&right==-1)
            return -1;

        if(left==-1){
            return root.right.val;
        }
        if(right==-1){
            return root.left.val;
        }

        return root.val;

    }



#笔试题目##奇安信#
全部评论
第一题 import java.util.*; public class Main {     public static void main(String[] args) {         Scanner scan = new Scanner(System.in);         String[] strs = scan.nextLine().split(" ");         int[] pids = new int[strs.length];         for (int i = 0; i < strs.length; i++)             pids[i] = Integer.parseInt(strs[i]);         strs = scan.nextLine().split(" ");         int[] ppids = new int[strs.length];         for (int i = 0; i < strs.length; i++)             ppids[i] = Integer.parseInt(strs[i]);         int n = Integer.parseInt(scan.nextLine());         System.out.println(getNums(pids, ppids, n));     }     static int getNums(int[] pids, int[] ppids, int n) {         HashMap<Integer, List<Integer>> map = new LinkedHashMap<>();         boolean flag = false;         for (int i = 0; i < ppids.length; i++) {             if (pids[i] == n)                 flag = true;             int ppid = ppids[i];             if (map.containsKey(ppid)) {                 List<Integer> tmp = map.get(ppid);                 tmp.add(pids[i]);                 map.replace(ppid, tmp);             } else {                 List<Integer> tmp = new ArrayList<>();                 tmp.add(pids[i]);                 map.put(ppid, tmp);             }         }         if (!flag)             return 0;         if (!map.containsKey(n))             return 1;         return getnum(map, n) + 1;     }     static int getnum(HashMap<Integer, List<Integer>> map, int n) {         if (!map.containsKey(n))             return 0;         List<Integer> list = map.get(n);         int all = list.size();         for (int i = 0; i < list.size(); i++)             all += getnum(map, list.get(i));         return all;     } }
2 回复 分享
发布于 2019-09-09 20:35
第一题给个边界就ok了
点赞 回复 分享
发布于 2019-09-09 20:35
你没考虑进程不存在的情况
点赞 回复 分享
发布于 2019-09-09 20:34

相关推荐

头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
07-24 19:01
门头沟学院 Java
后天笔试,又要开始做题了
Sairus:明天10:00笔试
投递京东等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

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