美团 3 20 笔试题

就记住了一道保存到了idea。记载一下

输入描述
N,M分别为两个数组长度,M为参数
接下来两组N个数的数组。 另第一个数组每个元素➕上一个x,然后%M,使得第一个数组等于第二个数组,其中顺序不做要求。输出x

例如
输入 :3,2
1,2,3.
1,0,0
输出:1

java代码如下 通过率百分之67~

public class Main {

public static void main(String[] args) {
    int n,m;
    Scanner in=new Scanner(System.in);
    n=in.nextInt();
    m=in.nextInt();

    int[] arrayA = new int[n];
    int[] arrayB = new int[n];

    for(int i=0;i<n;i++) {
        arrayA[i]=in.nextInt();
    }
    for(int i=0;i<n;i++) {
        arrayB[i]=in.nextInt();
    }

    int index=0;
    while(index <= m) {
        boolean flag = false;
        flag = panduan(arrayA,arrayB,index,m);
        if(flag==true) break;
        index++;
    }
    System.out.println(index);
}

private static boolean panduan(int[] arrayA, int[] arrayB, int index,int M) {

    Map<Integer,Integer> map=new HashMap<>();

    for(int i=0;i<arrayA.length;i++) {
        map.put((arrayA[i]+index)%M,map.getOrDefault((arrayA[i]+index)%M,0)+1);
    }//for end
    for(int i=0;i<arrayB.length;i++) {
        int current=arrayB[i];
        if(map.containsKey(current)&&map.get(current)>=0) {//假如存在
            map.put(current,map.get(current)-1);
        }
        else {
            return  false;
        }//else end
    }
    return  true;
}

}


喝奶茶
// 一群人喝奶茶比赛,他们可以选择连续的奶茶,也可以不喝
// 但是一旦选择奶茶,就必须喝完,C代表
// 每人每分钟喝多少奶茶,余数想上取整。
// 求最快喝完奶茶用时。 二分法

private static int minTea = Integer.MAX_VALUE;

public static void main(String[] args) {

    int n = 3;//三个人
    int[] tea = new int[]{10,3,7,9,4,10};//每杯奶茶含量
    int c=4;//每人每分钟喝
    drink(tea,0,n,0);
    System.out.println(minTea);


}

private static void drink(int[] tea, int start, int n, int ml) {
    //分别代表 奶茶 开始 还有几人 ml代表当前奶茶组合起来相对大的含量 返回ml最终即可 ml/c即为所求
    if (n==1) { int curMax=0;
        for(int j = start;j<tea.length;j++) {
            curMax += tea[j];
        }
       int Cur=Math.max(ml,curMax);//较大的那个是当前
        minTea = Math.min(minTea,Cur);
    }
    else {

        for (int i=start;i<tea.length;i++) {
            int sum=0;
            for (int j = start;j<=i; j++) {
                sum += tea[j];
            }
            drink(tea,i+1,n-1,Math.max(ml,sum));
        }

    }
}


两个字符串
比如 abc 和 cba
用字符串1拼接成字符串2 需要 ab c a b c a
即需要删除4个字符
输出4

代码如下

//例如 字符串 abc 和cba
// 那么需要 abc abc a 才能拼凑成cba 所以浪费了4个
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    String in1 = sc.next();
    String in2 = sc.next();
    char[] chars1 = in1.toCharArray();
    char[] chars2 = in2.toCharArray();
    int length1 = chars1.length;
    int length2 = chars2.length;
    int count = 0;
    int Start1=0;
        for (char tmp:chars2) {
            while(true) {

                if(Start1==chars1.length) Start1=0;
                if(tmp==chars1[Start1]) {
                    Start1++;
                   break;
                }
                if(tmp!=chars1[Start1]) {
                    count++;
                }
                Start1++;
            }
        }
    System.out.println(count);

}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值