2023-10-21 美团2024秋招后端开发岗笔试题

1 考察dfs和拓扑排序

1.1 题目描述(如果拓扑排序不清楚可以去做一下lc 207. 课程表)

在这里插入图片描述
在这里插入图片描述

1.2 答案

import java.util.*;

public class Meituan {

    static int m,n;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        m = in.nextInt();
        n = in.nextInt();
        char[][]cs=new char[m][n];
        for(int i=0;i<m;i++){
            String s=in.next();
            for(int j=0;j<n;j++){
                cs[i][j]=s.charAt(j);
            }
        }
        mp.put('A','B');
        mp.put('B','C');
        mp.put('C','D');
        mp.put('D','E');
        mp.put('E','A');
        mp.put('#','F');

        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(cs[i][j]=='A'){
                    cnt=0;
                    mark=new boolean[m][n];
                    dfs(cs,i,j);
                }
                if(f){
                    System.out.println(-1);
                    return;
                }
            }
        }
        System.out.println(ans);

    }
    static int ans=0;

    static int[]dirs=new int[]{-1,0,1,0,-1};
    static int cnt=0;
    static Map<Character,Character>mp=new HashMap<>();
    static boolean[][]mark=new boolean[m][n];
    static boolean f=false;
    static void dfs(char[][]cs, int p, int q){
        if(f){
            return;
        }
        for(int i=0;i<4;i++){
            int nx=p+dirs[i];
            int ny=q+dirs[i+1];

            if(nx>=0&&nx<m&&ny>=0&&ny<n){
                if(cs[nx][ny]==mp.get(cs[p][q])){
                    if(mark[nx][ny]){
                        f=true;
                        return;
                    }
                    mark[nx][ny]=true;
                    cnt++;
                    ans=Math.max(ans,cnt);
                    dfs(cs, nx,ny);
                    cnt--;
                }
            }

        }
    }
}

1.3 测试案例

case1:结果-1 
2 5
ABCDE
EDCBA

case2:结果2
3 3
ABC
BEE
CEE

2 树的dfs

2.1 题目描述

在这里插入图片描述
在这里插入图片描述

case2:正确结果28
7
1 1 1 2 2 2 3
1 2
1 3
2 4
2 5
3 6
3 7
2
2 4
3 5

2.2 方法一:暴力O(N^2)复杂度

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static List<List<Integer>>list=new ArrayList<>();
    static int[]weight;

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int n = in.nextInt();
        weight=new int[n];
        isColor=new int[n];

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

        for(int i=0;i<n;i++){
            list.add(new ArrayList<>());
        }
        for(int i=0;i<n-1;i++){
            int a = in.nextInt()-1;
            int b = in.nextInt()-1;
            // System.out.println("a:"+a+",b:"+b);
            list.get(a).add(b);
        }

        int q=in.nextInt();
        
        for(int i=0;i<q;i++){
            int u=in.nextInt()-1;
            int x=in.nextInt();
            if(isColor[u]!=x)
                paint(u,x);
        }

        dfs(0);

        System.out.println(res);
        
    }

    static long res=0;
    static int[]isColor;
    static void dfs(int u){
        res+=weight[u];
        
        List<Integer>tmp=list.get(u);
        for(int i=0;i<tmp.size();i++){
            dfs(tmp.get(i));
        }
    }
    static void paint(int u,int x){
        weight[u]=x;
        isColor[u]=x;
        List<Integer>tmp=list.get(u);
        for(int i=0;i<tmp.size();i++){
            paint(tmp.get(i),x);
        }
    }


}

2.3 方法三:O(N)复杂度

你的解决方法主要利用了深度优先搜索(DFS)和递归的思想。通过DFS遍历树的每个节点,并在遍历的过程中进行计算和状态更新。你还使用了一个时间戳的机制来记录每个节点最后一次被涂色的时间,以及使用了传递状态的方法来在递归调用中传递信息。

import java.util.*;

public class Meituan {
    // 记录各个节点的子节点
    static List<List<Integer>>list=new ArrayList<>();
    // 记录权重以及特色时间戳
    static long[][]paintTime;
    // result
    static long res=0;
    // 节点数
    static  int n;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        n = in.nextInt();
        paintTime=new long[n][2];
        for(int i=0;i<n;i++){
            int w = in.nextInt();
            paintTime[i][1]=w;
        }

        for(int i=0;i<n;i++){
            list.add(new ArrayList<>());
        }
        for(int i=0;i<n-1;i++){
            int a = in.nextInt()-1;
            int b = in.nextInt()-1;
            list.get(a).add(b);
        }

        int q=in.nextInt();

        for(int i=0;i<q;i++){
            int u=in.nextInt()-1; // 节点
            int x=in.nextInt(); // 涂色值

            long timeStamp= System.currentTimeMillis();

            paintTime[u][0]=timeStamp;
            paintTime[u][1]=x;
        }

        sumDfs(0,paintTime[0][0],paintTime[0][1]);

        System.out.println(res);

    }

    static void sumDfs(int u, long timeStamp, long x){
        // 获取最新的被涂色的值
        long finalX=timeStamp>paintTime[u][0]?x:paintTime[u][1];
        long finalTimeStamp=Math.max(timeStamp,paintTime[u][0]);
        res+=finalX;
        List<Integer>tmp=list.get(u);

        for (int i = 0; i < tmp.size(); i++) {
            sumDfs(tmp.get(i),finalTimeStamp,finalX);
        }
    }
}

2.4 改编题:如果将涂色改为新加值或者减少值呢?

3 回文串相关

3.1 题目描述

小美拿到了两个长度为n的字符串a和b,她希望生成一个新的长度为n的字符串c,希望满足ci是从ai和bi中二选一生成的。小美想知道,最终可以生成的所有字符串中有多少种不同的回文串。由于答案过大,请对10^9+7取模。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/108256.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Controller接收Postman的raw参数时,属性值全部为空

Controller接收Postman的raw参数时&#xff0c;属性值全部为空 情景再现 在进行业务代码的编写过程中&#xff0c;使用Postman等工具调用Controller接口时&#xff0c;发现属性值全部为空后端代码如下&#xff1a; Requset对象为&#xff1a; public class QuerySkuRequest …

Openssl数据安全传输平台017:客户端在Linux上的编译与调试

客户端代码在widows上编译&#xff0c;除了protobuf找不到目录&#xff0c;其他的基本没有什么问题。 然后打开虚拟机&#xff0c;项目文件已经在/home/projects目录下了 进入项目文件&#xff0c;对代码进行编译 第一次 // 找不到protobuf g *.cpp *.cc -ljson -lpthread -…

雨云OSS服务介绍和使用教程,以及Chevereto图床使用雨云OSS的教程

雨云OSS&#xff08;对象存储&#xff09;服务介绍和使用教程&#xff0c;以及Chevereto图床程序使用雨云OSS的教程 雨云OSS&#xff08;对象存储&#xff09;是一种基于S3协议的云端数据存储服务&#xff0c;它可以帮助你将数据安全、高效地存储在云端&#xff0c;并且可以随…

队列(Queue)概念+通过单、双链表来模拟队列+环形队列+OJ面试题(用队列实现栈、用栈实现队列、设计环形队列)

文章目录 队列(Queue)一、 概念1.尾进头出 二、模拟队列1.单链表实现队列1.1 设置结点1.2 入队offer1.3出队 poll1.4 empty方法&#xff0c;peek方法&#xff0c;getUsedSize方法 2.双链表实现队列2.1 创建结点2.2 入队列2.3 出队列2.4 peek、size、isEmpty方法 三、环形队列1.…

一键添加命名前缀(文件)

&#xff08;一&#xff09;需求描述 在上班摸鱼的我正准备打开手机刷会儿CSDN论坛&#xff0c;老板发给我一个压缩包并要求我给里面所有的文件的名称添加一个前缀”大项目_”。我本以为只有几个文件需要改&#xff0c;便没放在心上&#xff0c;反倒是心里暗暗吐槽老板“这么简…

c++设计模式二:原型模式

使用场景&#xff1a;当需要构建多个相同的类对象时&#xff0c;而且该类对象结构较为复杂&#xff0c;如果每个都重新组织构建会很麻烦。 其实&#xff0c;就是写一个拷贝构造函数&#xff0c;或者写一个拷贝每个成员变量的clone()方法。 举例说明&#xff1a;比如一个相亲网站…

Megatron-LM GPT 源码分析(四) Virtual Pipeline Parallel分析

引言 本文接着上一篇【Megatron-LM GPT 源码分析&#xff08;三&#xff09; Pipeline Parallel分析】&#xff0c;基于开源代码 GitHub - NVIDIA/Megatron-LM: Ongoing research training transformer models at scale &#xff0c;通过GPT的模型运行示例&#xff0c;从三个维…

51单片机复位电容计算与分析(附带Proteus电路图)

因为iC x (dU/dt).在上电瞬间&#xff0c;U从0变化到U,所以这一瞬间就是通的&#xff0c;然后这就是一个直流回路&#xff0c;因为电容C直流中是断路的&#xff0c;所以就不通了。 然后来分析一下这个电容的电压到底是能不能达到单片机需要的复位电压。 这是一个线性电容&…

Django 全局配置 settings 详解

文章目录 1 概述1.1 Django 目录结构 2 常用配置&#xff1a;settings.py2.1 注册 APP&#xff1a;INSTALLED_APPS2.2 模板路径&#xff1a;TEMPLATES2.3 静态文件&#xff1a;STATICFILES_DIRS2.4 数据库&#xff1a;DATABASES2.5 允许访问的主机&#xff1a;ALLOWED_HOSTS 1 …

算法通过村第十七关-贪心|黄金笔记|跳跃游戏

文章目录 前言跳跃游戏最短跳跃游戏总结 前言 提示&#xff1a;曾走过山&#xff0c;走过水&#xff0c;其实只是借助他们走过我的生命&#xff1b;我看着天&#xff0c;看着地&#xff0c;其实只是借助它们确定我的位置&#xff1b;我爱这她&#xff0c;爱着你&#xff0c;其实…

RabbitMQ (4)

RabbitMQ (4) 文章目录 1. 死信的概念2. 死信的来源3. 死信代码案例3.1 TTL 过期时间3.2 超过队列最大长度3.3 拒绝消息 前言   上文我们已经学习完 交换机 &#xff0c;知道了几个交换机的使用 &#xff0c;下面我们来学习一下 死信队列 1. 死信的概念 先从概念解释上搞清楚这…

BUUCTF刷题记录

[BJDCTF2020]Easy MD51 进入题目页面&#xff0c;题目提示有一个链接&#xff0c;应该是题目源码 进入环境&#xff0c;是一个查询框&#xff0c;无论输入什么都没有回显&#xff0c;查看源码也没什么用 利用bp抓包查看有没有什么有用的东西 发现响应的Hint那里有一个sql语句&…

WIN11新版画图问题解决

1 白色背景被连同删除的问题 解决方法&#xff1a;加层 将层调整为新建的层&#xff0c;在这个层下画图就行。 2 QQ截图无法直接放在画图上的问题 使用QQ截图的时候&#xff1a; 解决方法&#xff1a;使用windows自带的截图工具 步骤&#xff1a; 1. 使用快捷键winshifts 2.…

【Git企业开发】第一节.Git 初识

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a; 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&#xff01;&#xff01…

Remote Local File Inclusion (RFI/LFI)-文件包含漏洞

在Web应用开发过程中,程序开发者经常会把具有某一功能的部分代码封装起来形成独立的文件,在后续想实现该功能时,就不需要重复编写,直接调用文件,大大提高编程效率。这种调用文件的过程一般被称为文件包含。开发人员为了使代码更灵活,会将被包含的文件设置为变量,用来进行…

1.1 计算机安全概念

思维导图&#xff1a; 前言&#xff1a; 第1章: 计算机与网络安全概念笔记 1. 学习目标 了解保密性、完整性和可用性的关键安全需求。了解OSI的X.800安全架构。识别和举例说明不同的安全威胁和攻击。掌握安全设计的基本准则。熟悉攻击面和攻击树的使用。了解与密码标准相关的…

EASYX剪切区域

eg1:EASY中的颜色模型 可以参考推荐16进制颜色表&#xff1a;https://www.codeeeee.com/color/rgb.html 参考学习EASYX在线文档https://docs.easyx.cn/zh-cn/drawing-func easyx的基本概念和使用方式 #include <stdio.h> #include <easyx.h> #include <iostr…

Winform 多语言化快速解析替换工具-1分钟一个界面

随着业务的扩展&#xff0c;有的软件有多语言化的需求。那么如果软件已经很多写死的文字内容如何快速进行语言化替换呢&#xff0c;一个一个去改工作量太大。 于是开发了个小工具用来替换现有内容并生成语音包&#xff0c;原理就是采用正则表达式进行匹配控件关键字以及中文进…

orb-slam3编译手册(Ubuntu20.04)

orb-slam3编译手册&#xff08;Ubuntu20.04&#xff09; 一、环境要求1.安装git2.安装g3.安装CMake4.安装vi编辑器 二、源代码下载三、依赖库下载1.Eigen安装2.Pangolin安装3.opencv安装4.安装Python & libssl-dev5.安装boost库 三、安装orb-slam3四、数据集下载及测试 写在…

关于线性模型的底层逻辑解读 (机器学习 细读01)

一 多元线性回归 线性回归是机器学习中 有监督机器学习 下的一种算法。 回归问题主要关注的是因变量(需要预测的值&#xff0c;可以是一个也可以是多个)和一个或多个数值型的自变量(预测变量)之间的关系。 需要预测的值:即目标变量&#xff0c;target&#xff0c;y&#xff0c…