华为笔试9.9 AC3 Java

1. 完美排列 第一题靠运气过的,我反复提交了将近一个小时,出了一次AC,别的一直各种10%,20%,30%,50%,60%,90%…
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int [][] prefect = new int [n][2];
        for(int i =0;i<n*2;i++) {
            if (i < n ) {
                prefect[i][0] = sc.nextInt();
            } else {
                prefect[i-n][1] = sc.nextInt();
            }
        }
        int m = sc.nextInt();
        int [][] temp = new int [m][2];
        Queue<Integer> queue = new LinkedList<>();
        for(int i =0;i<m*2;i++){
            if(i < m){
                temp[i][0] = sc.nextInt();
            }else{
                temp[i-m][1] = sc.nextInt();
            }
        }
        for(int i=0;i<m-prefect.length;i++){
            if(temp[i][0] == prefect[0][0]&&temp[i][1] == prefect[0][1]){
                queue.add(i);
            }
        }
        int result = 0;
        while(!queue.isEmpty()){
            int position = queue.poll();
            result = position+1;
            boolean flag = false;
            int index = 0;
            for(int i = position;i<m;i++){
                if(index==prefect.length){
                    flag = true;
                    break;
                }
                else if(temp[i][0] == prefect[index][0]&&temp[i][1] == prefect[index][1]){
                    index++;
                }else{
                    result = 0;
                    break;
                }
            }
            if(flag){
                break;
            }
        }
        System.out.println(result);
    }
}
2.最长水沟
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int [][] map = new int [n][m];
        for(int i = 0;i<n;i++){
            for(int j =0;j<m;j++){
                map[i][j] = sc.nextInt();
            }
        }
        int result = 0;
        for(int i = 0;i<n;i++){
            for(int j =0;j<m;j++){
                int temp = track(map,i,j,Integer.MAX_VALUE,0);
                if(temp>result){
                    result = temp;
                }
            }
        }
        System.out.println(result);
    }

    public static int track(int [][] map,int x,int y,int ori,int result){
        if(x<0||x>=map.length||y<0||y>=map[0].length){
            return result;
        }
        if(map[x][y]>=ori){
            return result;
        }
        result++;
        return Math.max(Math.max(track(map,x-1,y,map[x][y],result),track(map,x+1,y,map[x][y],result)),Math.max(track(map,x,y-1,map[x][y],result),track(map,x,y+1,map[x][y],result)));
    }
}
3.树最大异或路径
import java.util.HashMap;
import java.util.Scanner;

public class Main {
    static int result = 0;
    public static class TreeNode{
        int id;
        int value;
        int left_id;
        int right_id;
        TreeNode left;
        TreeNode right;
        public TreeNode() {

        }
        public TreeNode(int id, int value) {
            this.id = id;
            this.value = value;
        }

        public TreeNode(int id, int value, int left_id, int right_id) {
            this.id = id;
            this.value = value;
            this.left_id = left_id;
            this.right_id = right_id;
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        HashMap<Integer,TreeNode> map = new HashMap<>();
        for(int i =0;i<n;i++){
            int node_id = sc.nextInt();
            int node_value = sc.nextInt();
            int left_id = sc.nextInt();
            int right_id = sc.nextInt();
            TreeNode treeNode = new TreeNode(node_id,node_value,left_id,right_id);
            map.put(node_id,treeNode);
        }
        for(Integer key:map.keySet()){
            TreeNode treeNode = map.get(key);
            if(treeNode.left_id!=-1){
                treeNode.left = map.get(treeNode.left_id);
            }
            if(treeNode.right_id!=-1){
                treeNode.right = map.get(treeNode.right_id);
            }
        }
        for(Integer key:map.keySet()){
            TreeNode treeNode = map.get(key);
            dfs(treeNode,0);
        }
        System.out.println(result);


    }
    public static void dfs(TreeNode node,int value){
        if(node==null){
            return;
        }
        value = value^node.value;
        if(value>result){
            result = value;
        }
        dfs(node.left,value);
        dfs(node.right,value);
    }
}


#笔经##华为#
全部评论
第一题气死人了,我写了一个类来表示那个东西,然后一直0%,改了好久代码,最后把类去掉了,90%
点赞 回复 分享
发布于 2020-09-09 21:48
不是9月9号吗?
点赞 回复 分享
发布于 2020-09-09 22:47
想问一下楼主第三题dfs为什么初始value传的是0
点赞 回复 分享
发布于 2020-09-10 00:07
第三题是求得从根节点到任意节点得异或和么?
点赞 回复 分享
发布于 2020-09-10 00:43
大佬第一题输出为何不用考虑,多种完美序列的情况,而需要多个输出比如用例,123 123 123123 123123
点赞 回复 分享
发布于 2020-09-10 00:55
最后一题一直显示超时,思路一样,不过使用list保存节点而不是map,是这个原因?
点赞 回复 分享
发布于 2020-09-10 09:16
第二题和第三题的思路是什么,一看见什么dfs就萎靡了
点赞 回复 分享
发布于 2020-09-10 14:24
没得题目描述嘛?
点赞 回复 分享
发布于 2020-09-11 15:21
还没收到测评,难道不应该是过了100分,就都有测评吗😕
点赞 回复 分享
发布于 2020-09-12 15:58
楼主你好,能简单说一下你第一个题的思路么?为什么要用到队列?
点赞 回复 分享
发布于 2020-09-13 14:36

相关推荐

12-21 10:42
已编辑
江西软件职业技术大学 Java
新宿站不停:该提升学历就提升学历,菜了就多练。没事找牛马公司虐自己是吧? 谁没事说自己“经验少”,这不自己把自己塞剎鼻hr嘴里找🐴吗
点赞 评论 收藏
分享
评论
7
22
分享
牛客网
牛客企业服务