美团笔试08.13

这次题目很简单,但是没有全AC,心态有点爆炸

1.

public class Test06 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int time = sc.nextInt();
        int[] times = new int[num];
        for(int i=0;i<num;i++){
            times[i]=sc.nextInt();
        }
        Arrays.sort(times);
        long res = 0;
        int curtime = 0;
        for(int i=0;i<num;i++){
            if(times[i]-curtime<time){
                res++;
            }else{
            curtime+=time;
            }
        }
        System.out.println(res);
    }
}

2

public class Test07 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        int m = nums[0];
        int n = nums[1];
        char[] ch = sc.nextLine().toCharArray();
        boolean[][] arr= new boolean[nums[0]][nums[1]];
        arr[0][0]=true;
        int x = 0;
        int y = 0;
        int last = n*m-1;
        boolean flag =false;
        for(int i=0;i<ch.length;i++) {
            if (ch[i] == 'W') {
                if (x >= 1) {
                    x--;
                }
            } else if (ch[i] == 'S') {
                if (x < m - 1) {
                    x++;
                }
            } else if (ch[i] == 'A') {
                if (y >= 1) {
                    y--;
                }
            } else if (ch[i] == 'D') {
                if (y < n - 1) {
                    y++;
                }
            }
            if (!arr[x][y]) last--;
            arr[x][y] = true;
            if (last == 0) {
                System.out.println("Yes");
                System.out.println(i+1);
                flag =true;
                break;
            }
        }
        if (!flag) {
            System.out.println("No");
            System.out.println(last);
        }
    }
}

扑克 * 时间限制: 3000MS* 内存限制: 589824KB

  • 题目描述:
  • Alice和Bob在玩一个游戏。有n张卡牌,点数分别为1到n。进行洗牌后,n张牌从上到下叠放形成一个牌堆。每次Alice先将当前牌堆顶的一张牌放到牌堆底,然后Bob再将当前牌堆顶的一张牌放到牌堆底。(特别地,当牌堆中只有一张牌时,相当于不进行任何操作)接着,他们会翻开当前牌堆顶的牌,并记下它的点数。当所有牌都被翻开后,他们也记下了n个点数。现在他们想根据记下的这个序列来还原一开始的牌(从牌堆顶到牌堆底每一张牌的点数)。
  • 输入描述
  • 第一行是一个正整数n,表示有n张牌。
  • 接下来一行n个用空格隔开的正整数,第i个数a_i表示第i张被翻开的牌的点数。
  • 1<=n<=100000
  • 输出描述
  • 一行n个用空格隔开的正整数,第i个数表示初始牌堆中从牌堆顶到牌堆底的第i张牌的点数。
  • 样例输入
  • 4
  • 1 2 3 4
  • 样例输出
  • 4 2 1 3
  • 提示
  • 样例解释1
  • 初始牌堆为:4 2 1 3
    1. Alice和Bob分别操作后牌堆为:1 3 4 2,此时1被翻开,牌堆变为3 4 2
    1. Alice和Bob分别操作后牌堆为:2 3 4,此时2被翻开,牌堆变为3 4
    1. Alice和Bob分别操作后牌堆为:3 4,此时3被翻开,牌堆变为4
  • 4.Alice和Bob分别操作后牌堆依旧为4,此时4被翻开。
public class Test08 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int sum = sc.nextInt();
        int[] card = new int[sum];
        for(int i=0;i<sum;i++){
            card[i]=sc.nextInt();
        }
        Deque<Integer> q = new ArrayDeque<>();
        q.push(card[sum-1]);
        q.push(card[sum-2]);
        for (int i=sum-3;i>=0;i--){
            q.push(card[i]);
            q.push(q.pollLast());
            q.push(q.pollLast());
        }
        for (int i = 0; i < sum; i++) {
            System.out.print(q.poll());
            System.out.print(" ");
        }
    }
}

4 题解来自 大佬

public class Test09 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        long res = 0;
        Map<Integer, Long> m1 = new HashMap<>();
        Map<Integer, Long> m2 = new HashMap<>();
        for (int j = 1; j < n - 1; j++) {
            int aj3 = 3 * arr[j];
            m1.clear();
            m2.clear();
            for (int i = j - 1; i >= 0; i--) {
                m1.put(arr[i], m1.getOrDefault(arr[i], 0L) + 1);
            }
            for (int k = j + 1; k < n; k++) {
                m2.put(arr[k], m2.getOrDefault(arr[k], 0L) + 1);
            }
            for (int ai : m1.keySet()) {
                long cnt = m1.get(ai) * m2.getOrDefault(aj3 - ai, 0L);
                res += cnt;
            }
        }
        System.out.println(res);
    }
}

5

public class Test10 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int[] nums= new int[num+1];
        for (int i=0;i<num;i++){
            nums[i+1]=sc.nextInt();
        }
        int res = dfs(1,nums);
        System.out.println(res);
    }
    public static int dfs(int index,int[] arr){
        if(2*index>arr.length-1) return arr[index];
        if(2*index+1>arr.length-1) return arr[index];
        int left = dfs(2*index,arr);
        int right = dfs(2*index+1,arr);
        return arr[index]+Math.max(left,right);
    }
}
#美团笔试#
全部评论
看到这个YES我就知道为啥炸了
1 回复 分享
发布于 2022-08-13 19:39
第五题直接就arr[i] += arr[i / 2],然后求arr数组中的最大值就可以了诶
点赞 回复 分享
发布于 2022-08-13 19:57
第一题有问题吧: for(int i=0;i<num;i++){             // 当前的截止时间大于送外卖的时间 + 当前使用的时间,说明是可以送到的,更新curtime             if(times[i] >= curtime + time){                  curtime+=time;             }else {                  // 送外卖的正常时间 + 使用的时间大于了 截止时间,说明送不到啊,使用魔法                  res++;                     }
点赞 回复 分享
发布于 2022-08-13 21:02
第五题这样写精简一点 private static int digui(int[] nums, int index){         if(index >= nums.length){             return 0;         }         return nums[index] + Math.max(digui(nums, 2 * index), digui(nums, 2 * index + 1)); }
1 回复 分享
发布于 2022-08-13 20:08
老哥。第三题的题目你有吗,我没参加笔试,但是我想看看题目。坐一坐,不懂啥意思
1 回复 分享
发布于 2022-08-13 21:56
有无题目,可以发下吗
1 回复 分享
发布于 2022-08-14 00:11
楼主过了多少
点赞 回复 分享
发布于 2022-08-13 19:30

相关推荐

03-16 11:19
已编辑
门头沟学院 Java
已经一年没发牛客了,为什么呢,因为没脸发...&nbsp;一年前的我自认为在25届中技术一流,八股无敌,项目出色,但是一年校招的蹉跎让我差点转行。24年春招收割了十几个实习&nbsp;offer&nbsp;之后我去了某家大厂实习到9月份转正失败,那时候的我还没有意识到噩梦将来,7月因为投秋招提前批没反馈,于是开始投了几个实习转正岗位练手又拿了3个中大厂&nbsp;offer,这时的我沉浸在我自以为是的骄傲里。9月秋招正式批开始后我几乎把我能找到的所有的岗位都投了一遍,只收获了大厂海笔,0面试。10月份第一家给我面试的公司是数字马力(蚂蚁的内包),诚恳的说,当时收到这家面试是嚣张的,觉得我拿这个&nbsp;offer&nbsp;如探囊取物,就当个保底吧。...
中街牛奶提子:是啊,不应该在秋招的时候继续投实习岗。也劝26届的,八月末后,实习岗就不应该投,给人错误的行情认知。佬是学院本,觉得约面难,双非何尝不是一样呢,秋招战场的激烈和实习完全不同。当时我秋招的时候也是边面实习,当时面实习面一个过一个觉得自己很优越,觉得能收获一堆实习offer那秋招肯定也行。为什么要在秋招拿一堆实习offer增强自己所谓的虚荣心,当时就是贱,为了所谓的攀比虚荣心
点赞 评论 收藏
分享
金泰相欧巴:双交大✌,论文专利都能写一页,还有两段实习。我尼玛脆辣
点赞 评论 收藏
分享
评论
3
10
分享

创作者周榜

更多
牛客网
牛客企业服务