华泰证券8.28笔试题解代码,本地ac,提交编译出错???


华泰证券8.28笔试题解代码

为啥第一题我的代码输入的nextLine()报错????
逻辑是没有问题的,在本地的idea上是可以ac的……
气死



代码如下,求大佬指正:

public static class Main {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);

            int k = 1;
            while (true){
                boolean over = false;//是-1?
                boolean isZero = false;//是0?

                int start = 0;
                List<List<Integer>> arr = new ArrayList<>();

                while (true){
                    String[] str = in.nextLine().split("  ");
                    if (str[0].equals("") || str.length == 0) {
                        over = true;//空行不管
                        break;
                    }
                    if (str[0].charAt(0) == '-'){
                        break;//out
                    }

                    for (int i = 0; i < str.length; i++) {
                        List<Integer> tmp = new ArrayList<>();//一对
                        int from = str[i].charAt(0) - '0';
                        if (from == 0) {
                            isZero = true;
                            break;
                        }
                        int to = str[i].charAt(2) - '0';
                        tmp.add(0);
                        tmp.add(from);
                        tmp.add(to);
                        arr.add(tmp);
                        start = to;//随便选个点
                    }
                    if (isZero) break;//遇到0,结束
                }
                if (isZero){//树OK?
                    huaTai23Pro1.Main.Graph graph = generatGrap(arr);
                    boolean ans = bfs(graph.nodes.get(1));//拿起始点
                    System.out.println(ans ? "Case "+ k +" is a tree" :
                            "Case "+ k +" is not a tree");
                }

                if (over) {
                    k++;//计数增加
                    continue;
                }
            }

        }

        //图,BFS给一个图的节点,然后开始遍历,而不是给整张图

        public static boolean bfs(huaTai23Pro1.Main.Node head){
            if (head == null) return true;
            Queue<huaTai23Pro1.Main.Node> queue = new LinkedList<>();
            HashSet<huaTai23Pro1.Main.Node> set = new HashSet<>();

            queue.add(head);
            set.add(head);
            boolean ans = true;//默认是树

            while (!queue.isEmpty()){
                head = queue.poll();
                if(head.in > 1) {
                    ans = false;
                    break;//不行了就
                }

                //全部直接邻居
                for(huaTai23Pro1.Main.Node next:head.nexts){
                    if (!set.contains(next)){
                        //没遍历过才能继续装
                        queue.add(next);
                        set.add(next);
                    }
                }
            }
            //就这么简单

            return ans;
        }

        //基础的数据类型,得自个写
        //边--和节点是相互渗透的俩数据结构
        public static class Edge{
            public int weight;
            public huaTai23Pro1.Main.Node from;
            public huaTai23Pro1.Main.Node to;
            public Edge(int w, huaTai23Pro1.Main.Node a, huaTai23Pro1.Main.Node b){
                weight = w;
                from = a;
                to = b;
            }
        }

        //节点
        public static class Node{
            public int in;
            public int out;
            public int value;
            public ArrayList<huaTai23Pro1.Main.Node> nexts;
            public ArrayList<huaTai23Pro1.Main.Edge> edges;//这里是相互渗透的,既然有邻居,就右边

            public Node(int v){
                value = v;//只需要给这么一个value即可
                in = 0;
                out = 0;
                nexts = new ArrayList<>();
                edges = new ArrayList<>();
            }
        }

        //图结构玩起来,图右边,节也有边
        public static class Graph{
            public HashMap<Integer, huaTai23Pro1.Main.Node> nodes;//v,Node
            public HashSet<huaTai23Pro1.Main.Edge> edges;
            public Graph(){
                nodes = new HashMap<>();//一般节点有value,对应包装袋,都是用哈希表玩的,并查集就是这么玩的
                edges = new HashSet<>();
            }

            public int getNodeNum(){
                return nodes.size();
            }

            public int getEdgeNum(){
                return edges.size();
            }
        }

        //将非标准图结构转化为左神标准图结构
        public static huaTai23Pro1.Main.Graph generatGrap(List<List<Integer>> matrix){
            if (matrix == null || matrix.size() == 0) return null;
            //matrix==
            //[1,1,2]
            //[2,2,3]
            //[3,3,1],w,f,t
            //挨个遍历行
            huaTai23Pro1.Main.Graph graph = new huaTai23Pro1.Main.Graph();

            for (int i = 0; i < matrix.size(); i++) {
                //建节点和边,然后装图,将节点的入度,出度,边和邻居放好
                int weight = matrix.get(i).get(0);
                int from = matrix.get(i).get(1);
                int to = matrix.get(i).get(2);

                //图中没节点,建,否则不必重复搞
                if (!graph.nodes.containsKey(from)) graph.nodes.put(from, new huaTai23Pro1.Main.Node(from));
                if (!graph.nodes.containsKey(to)) graph.nodes.put(to, new huaTai23Pro1.Main.Node(to));

                huaTai23Pro1.Main.Node fromNode = graph.nodes.get(from);
                huaTai23Pro1.Main.Node toNode = graph.nodes.get(to);//有就拿出来

                huaTai23Pro1.Main.Edge edge = new huaTai23Pro1.Main.Edge(weight, fromNode, toNode);//建边
                graph.edges.add(edge);

                fromNode.out++;
                toNode.in++;
                fromNode.nexts.add(toNode);
                fromNode.edges.add(edge);//除了入度说终点,其余都是说原点
            }

            return graph;
        }

    }



第二题ac
class Solution:
    def upper_bound_(self , n , v , a ):
        if a[-1] < v:
            return len(a) + 1

        l, r = 0, len(a) - 1
        while l < r:
            mid = l + ((r - l)>>1)
            if a[mid] < v:
                l = mid + 1
            else:
                r = mid
        return l + 1




第三题ac了60%
    public static class Main {
        public int a = 10;
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            while (in.hasNextInt()){
                int n = in.nextInt();
                int[] ability = new int[n];
                for (int i = 0; i < n; i++) {
                    ability[i] = in.nextInt();
                }
                int k = in.nextInt();
                int d = in.nextInt();

                long[][] maxProduct = new long[n][k];
                long[][] minProduct = new long[n][k];

                for (int i = 0; i < n; i++) {
                    maxProduct[i][0] = ability[i];
                    minProduct[i][0] = ability[i];
                }

                long max = Long.MIN_VALUE;
                for (int i = 0; i < n; i++) {
                    for (int j = 1; j < k; j++) {
                        for (int p = i - 1; p >= Math.max(i - d, 0); p--) {
                            maxProduct[i][j] = Math.max(maxProduct[i][j], maxProduct[p][j - 1]);
                            maxProduct[i][j] = Math.max(maxProduct[i][j], maxProduct[p][j - 1] * ability[i]);
                            minProduct[i][j] = Math.min(minProduct[i][j], minProduct[p][j - 1]);
                            minProduct[i][j] = Math.min(minProduct[i][j], minProduct[p][j - 1] * ability[i]);
                        }
                    }
                    max = Math.max(max, maxProduct[i][k - 1]);
                }
                System.out.println(max);
            }
        }
    }



#华泰证券##笔试##华泰#
全部评论
服了,我第一题也是0分,本地没问题,但是我是c++
2 回复 分享
发布于 2022-08-28 23:36 浙江
第三题那个值可以是负数,dp只过了50,吐了
点赞 回复 分享
发布于 2022-08-28 22:26 上海
这是不是左神的图节点🤣
点赞 回复 分享
发布于 2022-08-29 12:30 天津

相关推荐

10-28 15:45
门头沟学院 C++
西南山:海康威视之前不是大规模裁员吗
点赞 评论 收藏
分享
牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务