美团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);
    }
}
#美团##美团笔试##美团笔试题#
全部评论
草了,扑克牌那题想到约瑟夫环,然后就一直在推公式,搞半天忘记了暴力模拟这玩意了
14 回复 分享
发布于 2022-08-13 18:00
放个附加题更短的
4 回复 分享
发布于 2022-08-13 19:55
怎么和还有个树的题?
2 回复 分享
发布于 2022-08-13 18:02
n, t = list(map(int, input().strip().split())) deadlines = list(map(int, input().strip().split())) cur = 0 ans = n for i in range(len(deadlines)):     if deadlines[i]>=cur+t:         ans-=1         cur+=t print(ans) 第一题我这样为啥不对啊😓
2 回复 分享
发布于 2022-08-13 18:06
树那道是不是需要造树啊,我忘记咋造的了
1 回复 分享
发布于 2022-08-13 18:19
为啥我看了他得答案发现自己是个傻呗杯没这么简单,当时死活没想出来
1 回复 分享
发布于 2022-08-13 20:58
三元组那个,一直卡91%,int溢出真的是吐了。
1 回复 分享
发布于 2022-08-13 21:17
双端队列模拟,好优雅的思路
1 回复 分享
发布于 2022-08-13 22:46
扑克单向队列模拟就行了,先push0到n-1的下标,跟着输入同时模拟,然后给ans数组对应的下标赋值就行
1 回复 分享
发布于 2022-08-14 09:37
面试目前都是在陆续推进中,早笔试就可以早点获得面试机会哦~也祝同学秋招顺利~—————————————————————— 技术校招生们,如果还有其他关于求职的问题,那么你一定不能错过! 8月24日14:00-22:00,《美团请回答》特别节目“8小时不间断技术校招直播”,邀请美团8大技术方向通道委员+学长倾囊解惑!一次讲清楚所有技术方向,现场拆解笔面试,还有海量礼品相赠,欢迎来观看! 🟡方式一>>微信搜索【美团招聘】视频号,首页进直播 🟡方式二>>来B站直播间:http://live.bilibili.com/22355025 8小时岗位直播流程见:https://www.nowcoder.com/discuss/1019574,评论帖子HR在线回答哦
1 回复 分享
发布于 2022-08-18 17:17 北京
糙,第四题应该把int改成long long的
点赞 回复 分享
发布于 2022-08-13 18:07
function demo(arr){     let count = 0;     arr.sort((a,b)=> a-b)     for(let j = 0;j<arr.length>=t*(count+1)){             count++;         }     }     return n-count; } 大佬,第一题,为啥我这样子只通过54%</arr.length>
点赞 回复 分享
发布于 2022-08-13 18:17
太牛了 真的谢谢你😙
点赞 回复 分享
发布于 2022-08-13 18:37
太强了 我超 这个行数是真的优雅
点赞 回复 分享
发布于 2022-08-13 18:53
大佬能详细讲下扑克牌思路嘛?
点赞 回复 分享
发布于 2022-08-13 21:15
python刷题是真容易超时... 奈何C++不溜,留下的没有技术的泪水
点赞 回复 分享
发布于 2022-08-13 22:15
大佬,扑克牌模拟那个能解释下吗,不是每两次把牌置底后,都会抽出顶端的牌吗,为什么你这样就可以复原呢?
点赞 回复 分享
发布于 2022-08-14 09:04
有没有大佬知道怎么才能看自己的笔试成绩是否有效啊,交卷了才发现好像录屏没打开😅
点赞 回复 分享
发布于 2022-08-14 17:24
https://www.nowcoder.com/discuss/1013764途虎内推哦
点赞 回复 分享
发布于 2022-08-14 19:15
为啥最后一题pythonDFS给我过个0
点赞 回复 分享
发布于 2022-08-15 16:12

相关推荐

冷艳的小师弟在看机会:jd测评乱点直接被挂了,哭死~
点赞 评论 收藏
分享
shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
评论
43
211
分享
牛客网
牛客企业服务