首页 > 美团笔试
头像
溜溜湫_
编辑于 2020-08-22 18:48
+ 关注

美团笔试


第一题字符串校验:ac
代码:
import java.util.Scanner;

/**
 * 2021届秋招美团笔试
 * 字符串检查:
 * 1、第一个必须是大小写字母;
 * 2、只能包含字母和数字
 * 3、字母和数字分别至少有一个
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        in.nextLine();
        String[] strings = new String[t];
        for (int i = 0; i < t; i++) {
            strings[i] = in.nextLine();
        }
        for (int i = 0; i < strings.length; i++) {
            solution(strings[i]);
        }
    }

    public static void solution(String string) {
        if (string == null||string.length()<2) {
            System.out.println("Wrong");
            return;
        }

        char head = string.charAt(0);
        if (head < 65 || (head > 90 && head < 97) || head > 122) {
            System.out.println("Wrong");
            return;
        }
        int num = 0;
        int charNum = 0;
        for (int j = 0; j < string.length(); j++) {
            char temp = string.charAt(j);
            if (temp < 48 || (temp > 57 && temp < 65) || (temp > 90 && temp < 97) || temp > 122) {
                System.out.println("Wrong");
                return;
            }
            if (temp >= 48 && temp <= 57) {
                num++;
            }
            if (temp >= 65 && temp <= 90 || temp >= 97 && temp <= 122) {
                charNum++;
            }
        }
        if (num >= 1 && charNum >= 1) {
            System.out.println("Accept");
        } else {
            System.out.println("Wrong");
        }
    }
}



第二题:跑腿订单   ac
import java.util.*;

/**
 * 跑腿送外卖
 * 输入:n,m,n表示订单数量,m表示可以拿的订单数;
 * 工资:跑腿费+2*订单重量
 * 输出:可以获得的金钱最大的方案对应选择的订单标号,如果有多个,选择字典序小的
 */
public class Main {
    private static List<Integer> list = new ArrayList<>();
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < nums.length; i++) {
            int price = in.nextInt();
            int weight = in.nextInt();
            nums[i] = price + 2 * weight;
        }
        List<Integer> res = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            list.add(nums[i]);
        }
        while (m > 0) {
            res.add(findMax());
            m--;
        }
        int[] arr = new int[res.size()];
        for (int i = 0; i < res.size(); i++) {
            arr[i] = res.get(i);
        }
        Arrays.sort(arr);
        for (int i = 0; i < arr.length; i++) {
            if (i == 0) {
                System.out.print(arr[i]);
            } else {
                System.out.print(" " + arr[i]);
            }
        }
    }
    public static int findMax() {
        int index = 0;
        int max = 0;
        for (int i = 0; i < list.size(); i++) {
            max = Math.max(max, list.get(i));
        }
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i) == max) {
                index = i + 1;
                break;
            }
        }
        list.set(index-1, -1);
        return index;
    }
}

第三题:最大子序列和  64%
代码:
import java.util.Scanner;

/**
 * 给定一个序列,按某个顺序依次取出序列中的数据,每次取完相当于把序列分割开来,变成多个子序列,
 * 每次取完,输出一下当前存在的子序列中和最大的值
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] thing = new int[n];
        int[] sort = new int[n];
        for (int i = 0; i < n; i++) {
            thing[i] = in.nextInt();
        }
        for (int i = 0; i < n; i++) {
            sort[i] = in.nextInt();
        }
        for (int i = 0; i < n; i++) {
            thing[sort[i]-1] = 0;
            solution(thing);
        }
    }

    public static void solution(int[] thing) {
        int n = thing.length;
        long max = 0;
        long temp = 0;
        for (int i = 0; i < n; i++) {

            if (thing[i] != 0) {
                temp += thing[i];
            } else {
                max = Math.max(max, temp);
                temp = 0;
            }
            max = Math.max(max, temp);
        }
        System.out.println(max);
    }

}

第四题:不会
/**
 * 输入:n,k;n表示节点的个数,k表示最大节点值和最小节点值的差的最大值
 * 之后输入n-1行:每行有两个数字,分别表是节点序号,输入的两个序号表示两个节点之间是相连的
 * 输入一行:n个数,分别表示每个节点的值
 * 输出:存在多少种可以连通的节点选择,保证最大节点值和最小节点值的差<=k
 */
第五题:
/**
 * 输入:x,y和x+y个数字
 * 把x+y个数字分成两组,一组为x个,一组y个
 * 求:分组后两个组的平均值之和为最大,输出分组的选择情况,如果有多组,输出字典序最小的情况
 * 例如:x=4,y=4;1,5,3,6,7,3,4,5
 * 输出:AAAABBBB
 */

找到一种特殊情况:x=y时,直接输出x个Ay个B就行

全部评论

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

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐