4.1美团笔试,大佬指点一下,真的很郁闷

不知道哪里错了,错了也不知道该怎么调,没啥进步,大佬可以指点一下吗?

感激不尽

第一题

45%

输入n个数和m次操作

把+改成别的符号

class Solution {
    public double getRes(int[] a,long[] an, int index,String tmp) {
        int len=an.length;
        double sum=0;
        sum=an[len-1]-an[index+1]+an[index-1];
        if(tmp.equals("+")){
            sum=sum+a[index]+a[index+1];
        }else if(tmp.equals("-")){
            sum=sum+a[index]-a[index+1];
        }else if(tmp.equals("*")){
            sum=sum+a[index]*a[index+1];
        }else if(tmp.equals("/")){
            sum=sum+(double)a[index]/a[index+1];
        }
        return sum;
    }
}
public class Main {
    public static void main(String args[]) {
        Scanner cin = new Scanner(System.in);
        int n, m;
        n=cin.nextInt();
        int[] a=new int[n+1];
        long[] an=new long[n+1];
        long sum=0;
        for(int i=1;i<=n;i++){
            a[i]=cin.nextInt();
            sum+=a[i];
            an[i]=sum;
        }
        m=cin.nextInt();
        int index;
        String tmp;
        for(int j=0;j<m;j++){
            index=cin.nextInt();
            tmp=cin.next();
            Solution solution = new Solution();
            System.out.printf("%.1f",solution.getRes(a,an,index,tmp));
        }
    }
}

第二题

100%

排序然后减一下

第三题

18%

收藏夹,0是改,1是查

就模拟了一下啊,维护了一个前缀和

class Solution {
    public long select(long[] an, int x,int y) {
       return an[y]-an[x-1];
    }
    public void update(long[] a,long[] an,int x,int y){
        a[x]=y;
        for(int i=x;i<an.length;i++){
            an[i]+=y;
        }
    }
}
public class Test02 {
    public static void main(String args[]) {
        Scanner cin = new Scanner(System.in);
        int n,m;
        n=cin.nextInt();
        m=cin.nextInt();
        long[] p=new long[m+1];
        int[] x=new int[m+1];
        int[] y=new int[m+1];
        long[] a=new long[n+1];
        long[] an=new long[n+1];
        for(int i=1;i<=m;i++){
            p[i]=cin.nextInt();
        }
        for(int i=1;i<=m;i++){
            x[i]=cin.nextInt();
        }
        for(int i=1;i<=m;i++){
            y[i]=cin.nextInt();
        }
	  //p表示操作
	  //x表示第一个操作数,y第二个
	  //a原数组,an前缀和
        Solution solution = new Solution();
        for(int i=1;i<=m;i++){
            if(p[i]==0){
                solution.update(a,an,x[i],y[i]);
            }else {
                System.out.println(solution.select(an,x[i],y[i]));
            }
        }
    }
}

第四题

18%

魔法水,指定倒满某个杯子

dp

public class Test02 {
    public static void main(String args[]) {
        Scanner cin = new Scanner(System.in);
        int n;
        n=cin.nextInt();
        long[] a=new long[n+1];
        int[] z=new int[n+1];
        int[] z0=new int[n+1];
        long[] asum=new long[n+1];
        for(int i=1;i<=n;i++){
            a[i]=cin.nextInt();
        }
        for(int i=1;i<=n;i++){
            a[i]=a[i]-cin.nextInt();
        }
        for(int i=1;i<=n;i++){
            z[i]=cin.nextInt();
        }
	  //a每个杯子还差多少可以倒满
	  //z每个杯子1ml需要的魔法值
	  //asum倒满这个杯子需要的最小魔法值
	  //z0 是通过哪个魔法值倒满的
        z0[1]=z[1];
        asum[1]=z0[1]*a[1];
	  //dp枚举的过程
        for(int i=2;i<=n;i++){
            long sum1=asum[i-1]+z0[i-1]*a[i];
            long sum2=z[i]*a[i];
            if(sum1<sum2){
                asum[i]=sum1;
                z0[i]=z0[i-1];
            }else{
                asum[i]=sum2;
                z0[i]=z[i];
            }
        }
	  //输出
        int m=cin.nextInt();
        int[] q=new int[m+1];
        for(int i=1;i<=m;i++){
            q[i]=cin.nextInt();
        }
        for(int i=1;i<=m;i++){
            System.out.println(asum[q[i]]);
        }
    }
}

#美团4.1笔试##美团##笔试#
全部评论
我也这样过不去 都是0.18
1 回复 分享
发布于 2023-04-01 12:41 北京
笔试完就流程结束了
1 回复 分享
发布于 2023-04-01 12:56 福建
第三题更新的时候,维护的前缀和数组后续元素增加的值应该是 新值-旧值的差值?
1 回复 分享
发布于 2023-04-01 13:02 广东
大家可以留下言,或者是私我一下,有点迷茫了,给点算法方面的意见,笔试一直都过不了很郁闷
点赞 回复 分享
发布于 2023-04-01 12:35 陕西
第二题我也前缀和,过了,第四个我设的dp是[0,i-1]满以后然后添加,维护一个左边最小,然后过了
点赞 回复 分享
发布于 2023-04-01 12:43 四川
收藏夹c++暴力可以100%
点赞 回复 分享
发布于 2023-04-01 12:56 福建
我用的golang所有题都是运行错误AC9%,到现在也没找到原因
点赞 回复 分享
发布于 2023-04-01 13:33 安徽

相关推荐

醒工硬件:如果你想投硬件,可以考虑这么改: 1.个人荣誉没太有保留价值,除非一页凑不满 2.主修课程太多了,可以考虑删减一部分,或者分成硬件和嵌入式2个简历,侧重点不一样 3.个人技能放到学习经历下面,项目经历上面。学习一下AD画板,你有基础一两周也差不多学会了,面试官问你就说你会(总不能拉你实操吧),公司里一般用AD和Cadence比较多,AD好上手一些。增加常用仪器工具说明,例如示波器、信号发生器、电子负载、烙铁、风枪等 4.项目,项目可以多换换行,挤在一起不好阅读。可以说下红外那边用什么接口,蓝牙那边用什么接口,用了哪些关键技术点,多用术语。如果你投硬件,就增加项目1描述比重,降低项目2描述比重
点赞 评论 收藏
分享
起名字真难233:人家只有找猴子的预算,来个齐天大圣他们驾驭不住呀😂😂
点赞 评论 收藏
分享
评论
2
5
分享

创作者周榜

更多
牛客网
牛客企业服务