Skip to main content

美团2024届秋招笔试第三场编程真题

·448 words·3 mins
WFUing
Author
WFUing
A graduate who loves coding.
Table of Contents
  • 题目链接:https://www.nowcoder.com/exam/company?currentTab=recommand&jobId=100&selectStatus=0&tagIds=179

1.平均数为k的最长连续子数组
#

import java.util.Scanner;
import java.lang.*;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(), k = in.nextInt();
        long[] nums = new long[n + 1];
        int i = 0, ans = -1;
        Map<Long, Integer> map = new HashMap<>();
        map.put(0L, 0);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            nums[++i] += in.nextInt() - k + nums[i - 1];
            if(!map.containsKey(nums[i])) map.put(nums[i], i);
            else ans = Math.max(ans, i - map.get(nums[i]));
        }
        System.out.println(ans);
    }
}

2.小球投盒
#

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 输入的n, m
        int n = sc.nextInt(), m = sc.nextInt();
        // 使用 HashSet 存储整数集合
        Set<Integer> set = new HashSet<>();
        // 初始化 set 包含从 1 到 n 的所有整数
        for (int i = 1; i <= n; i++) set.add(i);
        // 循环计数变量
        int i;
        for (i = 1; i <= m; i++) {
            if (sc.nextInt() == 1) {
                // 如果输入为 1,移除下一个输入的整数
                set.remove(sc.nextInt());
                // 如果集合为空,退出循环
                if (set.isEmpty()) break;
            } else {
                // 否则,读取下一个输入的整数
                int x = sc.nextInt();
                // 如果集合中不包含 x,退出循环
                if (!set.contains(x)) break;
                // 否则,重置集合并添加 x
                set = new HashSet<>();
                set.add(x);
            }
        }
        // 输出结果,如果 i 大于 m,输出 -1,否则输出 i
        System.out.println(i > m ? -1 : i);
    } 
}

4.小美的游戏
#

用long也会爆,后来用BigDecimal过了。

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        long temp = (long) (1e9) + 7;
        // 注意 hasNext 和 hasNextLine 的区别
        Queue<Long> q = new PriorityQueue<>(new Comparator<Long>() {
            public int compare(Long a, Long b) {
                if (b > a) return 1;
                return -1;
            }
        });
        int n = in.nextInt(), k = in.nextInt();
        for (int i = 0; i < n; i++) {
            q.offer(in.nextLong());
        }
        for (int i = 0; i < k; i++) {
            long a1 = q.poll();
            long a2 = q.poll();
            q.offer((a1 * a2) % temp);
            q.offer((long)1);
        }
        long ans = 0;
        while (!q.isEmpty()) {
            ans = ( ans + q.poll()) % temp;
        }
        System.out.print(ans);
    }
}

import java.math.BigDecimal;
import java.util.PriorityQueue;
import java.util.Scanner;

public class Main {
    public static final int MOD = (int) 1e9 + 7;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        PriorityQueue<BigDecimal> pq = new PriorityQueue<>((a, b) -> b.compareTo(a));

        for (int i = 0; i < n; i++) {
            long x = sc.nextLong();
            pq.offer(BigDecimal.valueOf(x));
        }

        BigDecimal ans = BigDecimal.ZERO;
        while (k-- > 0) {
            BigDecimal x = pq.poll();
            BigDecimal y = pq.poll();
            pq.offer(x.multiply(y));
            pq.offer(BigDecimal.ONE);
        }

        while (!pq.isEmpty()) {
            ans = ans.add(pq.poll());
        }

        System.out.println(ans.remainder(BigDecimal.valueOf(MOD)));
    }
}