首页 > 美团8.13 后端方向笔试题 全AC
头像
菜鸡打工人
编辑于 2022-08-13 22:26
+ 关注

美团8.13 后端方向笔试题 全AC 内部员工回复

这题也太简单了。看脉脉上也说美团没多少HC。凉

魔法外卖

简单的模拟

public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        String[] line = cin.nextLine().split(" ");
        int n = Integer.parseInt(line[0]), t = Integer.parseInt(line[1]);
        int[] delivery = Arrays.stream(cin.nextLine().split(" ")).mapToInt(Integer::valueOf).toArray();
        int count = 0, time = 0;
        Arrays.sort(delivery);
        for (int i = 0; i < n; i++) {
            if (time + t <= delivery[i]){
                time += t;
            } else {
                count++;
            }
        }
        System.out.printf("%d", count);
    }
}

打扫房间

简单模拟

public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        String[] line = cin.nextLine().split(" ");
        int n = Integer.parseInt(line[0]), m = Integer.parseInt(line[1]), k = Integer.parseInt(line[2]);
        String orders = cin.nextLine();
        int[][] room = new int[n][m];
        room[0][0] = 1;
        int count = 1, x = 0, y = 0;
        for (int i = 0; i < orders.length(); i++) {
            char ch = orders.charAt(i);
            if (ch == 'W') x--;
            else if (ch == 'A') y--;
            else if (ch == 'S') x++;
            else y++;
            if (room[x][y] == 0) {
                room[x][y] = 1;
                count++;
            }
            if (count == n * m) {
                System.out.println("Yes");
                System.out.println(i + 1);
                return;
            }
        }
        System.out.println("No");
        System.out.println(n * m - count);
    }
}

扑克牌

用双向队列的 简单模拟
牌堆可以使用双向队列模拟。每轮从牌堆顶抽一张牌,再放入牌堆底。这个动作可以抽象为从队列头取出一个元素,再放入队尾。
我们使用origin数组模拟初始牌堆中每张牌的顺序和每张牌的牌点的关系。

public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int n =  Integer.parseInt(cin.nextLine());
        int[] card = Arrays.stream(cin.nextLine().split(" ")).mapToInt(Integer::valueOf).toArray();
        int[] origin = new int[n];
        Deque<Integer> d = new ArrayDeque<>();
        for (int i = 0; i < n; i++) d.offerLast(n - i - 1);
        for (int i = 0; i < n; i++) {
            d.offerFirst(d.pollLast());
            d.offerFirst(d.pollLast());
            origin[d.pollLast()] = card[i];
        }
        for (int i = 0; i < n; i++) {
            System.out.printf("%d ", origin[i]);
        }
    }
}

三元组

LeetCode经典3数之和改编版。唯一的坑是最后的三元组很多,用int会溢出。盲猜测试数据是全0。

public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int n =  Integer.parseInt(cin.nextLine());
        int[] nums = Arrays.stream(cin.nextLine().split(" ")).mapToInt(Integer::valueOf).toArray();
        long count = 0;
        Map<Integer, Integer> mp = new HashMap<>();
        mp.put(nums[n - 1], 1);
        for (int i = n - 2; i >= 1; i--) {
            for (int j = i - 1; j >= 0; j--) {
                count += mp.getOrDefault(3 * nums[i] - nums[j], 0);
            }
            mp.put(nums[i], mp.getOrDefault(nums[i], 0) + 1);
        }
        System.out.println(count);
    }
}

LeetCode经典 三角形最小路径。 不用care是不是叶子。因为叶子的累计的值一定比非叶子大。

public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int n =  Integer.parseInt(cin.nextLine());
        String[] _nums = cin.nextLine().split(" ");
        int[] nums = new int[n + 1];
        for (int i = 1; i <= n; i++) nums[i] = Integer.parseInt(_nums[i - 1]);
        int ans = 0;
        Queue<Integer> q = new ArrayDeque<>();
        q.offer(1);
        while (!q.isEmpty()) {
            int t = q.poll();
            ans = Math.max(ans, nums[t]);
            if (2 * t <= n){
                nums[2 * t] += nums[t];
                q.offer(2 * t);
            }
            if (2 * t + 1 <= n) {
                nums[2 * t + 1] += nums[t];
                q.offer(2 * t + 1);
            }
        }
        System.out.println(ans);
    }
}

全部评论

(27) 回帖
加载中...
话题 回帖