美团 4.18 笔试代码分享(Java版本,无题目)

这是第一次笔试代码保留比较完整的,之前的笔试没保留代码,而且做的实在太差,只有看牛客大佬们帖子的份,这次回馈一下。

第一题  热点数据前十条    只通过了64%的测试用例

import javafx.util.Pair;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int n = Integer.valueOf(s);
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i < n; i++){
            String s1 = sc.nextLine();
            if(s1.equals("query")){
                if(map.isEmpty()) System.out.println("null");
                else{
                    Pair[] arr = new Pair[map.size()];
                    int index = 0;
                    for(int key : map.keySet()){
                        Pair<Integer,Integer> pair = new Pair<>(key, map.get(key));
                        arr[index++] = pair;
                    }
                    Arrays.sort(arr, (a, b) -> {
                        if(a.getValue() == b.getValue()){
                            return (int)a.getKey() - (int)b.getKey();
                        }else{
                            return (int)b.getValue() - (int)a.getValue();
                        }
                    });
                    int j = 1;
                    for(Pair pair : arr){
                        if(j > 10) break;
                        System.out.print(pair.getKey() + " ");
                        j++;
                    }
                    System.out.println();
                }
            }else{
                String[] split = s1.split(" ");
                int key = Integer.valueOf(split[1]);
                int val = Integer.valueOf(split[2]);
                map.put(key, map.getOrDefault(key, 0) + val);
            }
        }
    }

}

第二题  战队

import java.util.*;

public class Main2 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int k = sc.nextInt();
        long total_A = 0;
        long total_B = 0;
        for(int i = 0; i < n; i++){
            int a = sc.nextInt();
            int b = sc.nextInt();
            if(b >= k) total_A += a * b;
        }
        for(int i = 0; i < m; i++){
            int a = sc.nextInt();
            int b = sc.nextInt();
            if(b >= k) total_B += a * b;
        }
        System.out.print(total_A + " " + total_B);
        if(total_A > total_B) System.out.println("A");
        else System.out.println("B");
    }

}

第三题 排车厢

import java.util.*;

public class Main3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.valueOf(sc.nextLine());
        List<List<Integer>> list = new ArrayList<>();
        Map<String, List> map = new HashMap<>();
        for(int i = 0; i < N; i++){
            String s = sc.nextLine();
            String[] split = s.split(" ");
            int a = Integer.valueOf(split[0]);
            if(a == 1){
                int b = Integer.valueOf(split[1]);
                String c = split[2];
                if(map.containsKey(c)) map.get(c).add(b);
                else{
                    List<Integer> arrayList = new ArrayList<>();
                    arrayList.add(b);
                    map.put(c, arrayList);
                    list.add(arrayList);
                }
            }else{
                String b = split[1];
                String c = split[2];
                List<Integer> b_list = map.get(b);
                List<Integer> c_list = map.get(c);
                int index_b = 0;
                int index_c = 0;
                for(int j = 0; j < list.size(); j++){
                    if(list.get(j) == b_list) index_b = j;
                    if(list.get(j) == c_list) index_c = j;
                }
                list.remove(index_b);
                list.add(index_b, c_list);
                list.remove(index_c);
                list.add(index_c, b_list);
            }
        }

        for(List<Integer> list1 : list){
            for(int num : list1){
                System.out.print(num + " ");
            }
        }

    }

}

第四题  树的不可到达节点

import java.util.*;

public class Main4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int k = sc.nextInt();
        List<Node> list = new ArrayList<>();
        for(int i = 0; i < n; i++){
            list.add(new Node());
        }
        for(int i = 0; i < m; i++){
            int root = sc.nextInt() - 1;
            int left = sc.nextInt() - 1;
            int right = sc.nextInt() - 1;
            list.get(root).left = list.get(left);
            list.get(root).right = list.get(right);
        }
        for(int i = 0; i < n; i++){
            list.get(i).val = sc.nextInt();
        }
        Node root = list.get(k - 1);
        int ans = 0;
        dfs(root, 1, Integer.MAX_VALUE);
        for(Node node : list){
            if(!node.flag){
                ans += dfs1(node);
            }
        }
        System.out.println(ans);
    }

    public static void dfs(Node node, int left, int right){
            if(node == null) return;
           if(left >= right) {
               node.flag = false;
               return;
           }
           dfs(node.left, left, Math.min(right, node.val));
           dfs(node.right,Math.max(left, node.val), right);
    }

    public static int dfs1(Node node){
        if(node == null) return 0;
        return dfs1(node.left) + dfs1(node.right) + 1;
    }

    static class Node{
        int val;
        Node left;
        Node right;
        boolean flag = true;
    }

}

第五题  扑克牌   没时间,骗分18%

import java.util.Scanner;

public class Main5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        for(int i = 0; i < N - 1; i++){
            if(i % 2 == 0)System.out.println("Tuan");
            else System.out.println("Draw");
        }
        System.out.println("Mei");
    }
}

#笔经##美团##Java工程师##笔试题目#
全部评论
第三题思路差不多,我是用map直接保留string和在arraylist中的位置,可惜本地没调试完时间到了。
1 回复
分享
发布于 2021-04-18 20:17
第一题解答是有问题的,输入的数字是集合最大大小,之后超过大小了需要删除热点最低的数据,类似于LRU和LFU解答
点赞 回复
分享
发布于 2021-04-19 12:18
秋招专场
校招火热招聘中
官网直投

相关推荐

点赞 评论 收藏
转发
4 7 评论
分享
牛客网
牛客企业服务