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

news2024/9/30 13:30:54

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取模。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务治理之道:构建可伸缩和高可用的系统

文章目录 什么是微服务治理&#xff1f;1. 服务发现和注册2. 负载均衡3. 容错处理4. 安全5. 日志和监控6. 版本管理 构建可伸缩的微服务系统1. 水平扩展2. 使用负载均衡3. 自动化扩展4. 异步通信5. 缓存 构建高可用的微服务系统1. 容错设计2. 多区域部署3. 自动故障转移4. 数据…

环境变量的秘密武器:让您的命令行效率倍增(环境变量图文详解)

Linux中的环境变量&#xff08;图文详解&#xff09; 1. 基本概念2. 常见环境变量PATH : 指定命令的搜索路径HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)SHELL : 当前Shell,它的值通常是/bin/bash 3. 查看环境变量方法4. 测试PATH5. HOME6. 和环境变量…

众和策略可靠吗?股票有杠杆吗?

可靠 在投资股票时&#xff0c;人们常常听到“杠杆”这个概念。可是&#xff0c;股票有杠杆吗&#xff1f;这个问题并不完全是是非两色的&#xff0c;需求从多个视点来看待。 从理论上讲&#xff0c;股票不是一个有杠杆的财物类别。杠杆是一种金融东西&#xff0c;能够使投资…

【解决AWS上死机问题】

状况&#xff1a;每天手动重启AWS的机器&#xff0c;如果不重启&#xff0c; 网站打不开。 发现死机原因为内存用完了&#xff0c; 这也是我后面安装软件时才发现的 检查内存 free 检查谁用了内存 ps aux|head -1;ps aux|grep -v PID|sort -rn -k 4|head 检查发现使用内存的都…

【每日一题】1465. 切割后面积最大的蛋糕-2023.10.27

题目&#xff1a; 1465. 切割后面积最大的蛋糕 矩形蛋糕的高度为 h 且宽度为 w&#xff0c;给你两个整数数组 horizontalCuts 和 verticalCuts&#xff0c;其中&#xff1a; horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离verticalCuts[j] 是从矩形蛋糕的左侧到…

LeetCode 1465. 切割后面积最大的蛋糕:纵横分别处理

【LetMeFly】1465.切割后面积最大的蛋糕&#xff1a;纵横分别处理 力扣题目链接&#xff1a;https://leetcode.cn/problems/maximum-area-of-a-piece-of-cake-after-horizontal-and-vertical-cuts/ 矩形蛋糕的高度为 h 且宽度为 w&#xff0c;给你两个整数数组 horizontalCut…

LeetCode209——长度最小的子数组

LeetCode209——长度最小的子数组 题目描述&#xff1a; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数…

【LeetCode:1465. 切割后面积最大的蛋糕 | 贪心 + 排序】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

高校打造动捕实训室:开启元宇宙创新教育时代

随着科技的发展&#xff0c;高校教育面临着新的挑战与机遇。高校动捕实训室涉及多个学科领域&#xff0c;如艺术学院、设计学院、新媒体学院等&#xff0c;适用于动画、视觉传达、数码媒体、数字媒体艺术等专业。动捕实训室可以为学生提供创意发挥的空间&#xff0c;使用动捕设…

【文末送书】GPT如何赋能软件研发全流程

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

Typora(morkdown编辑器)的安装包和安装教程

Typora&#xff08;morkdown编辑器&#xff09;的安装包和安装教程 下载安装1、覆盖文件2、输入序列号①打开 typora &#xff0c;点击“输入序列号”&#xff1a;②邮箱一栏中任意填写&#xff08;但须保证邮箱地址格式正确&#xff09;&#xff0c;输入序列号&#xff0c;点击…

Web3 治理实践探讨:如何寻找多元化发展路径?

Web3 领域变革正崭露头角&#xff0c;而社区治理开始成为行业热议话题。Web3 项目如何探寻多元化建设的解困路径&#xff0c;究竟是治理模型的精进成为首要问题&#xff0c;还是吸纳更多资金与组织教育培训&#xff0c;让开发者成为项目建设的中坚力量&#xff1f;本期 TinTinW…

聚量推客滴滴学生认证app地推网推拉新升级啦

“聚量推客”滴滴学生认证项目升级 滴滴学生认证升级后分为微信推广版本和支付宝推广版本两种码 根据自己需要选择推广场景&#xff0c;适合地推和网推

ReentranLock超详细讲解

目录 ReentranLockAQS底层AQS的变量、常量与内部类Node内部类 FairSync&#xff1a;公平锁lock方法AbstractQueuedSynchronizer的acquire方法tryAcquire方法getState方法setExclusiveOwnerThread方法总结tryAcquire方法 返回AbstractQueuedSynchronized的acquire方法acquireQue…

「AI知多少」第二期推荐《AIGC:智能创作时代》

一、书名 《AIGC&#xff1a;智能创作时代》 二、简介 在人工智能发展的漫长历程中&#xff0c;如何让机器学会创作一直被视为难以逾越的天堑&#xff0c;“创造力”也因此被视为人类与机器最本质的区别之一。然而&#xff0c;人类的创造力也终将赋予机器创造力&#xff0c;…

YTM32的增强型定时器eTMR外设模块详解

文章目录 eTMR外设简介eTMR工作机制系统框图引脚与信号计数器与时钟源输出比较模式PWM模式通道配对通道对的互补输出&#xff08;Complementary Mode&#xff09;双缓冲输出PWM&#xff08;Double Switch&#xff09;错误检测机制&#xff08;Fault Detection&#xff09; 输入…

搭建confluence

confluent是一款由JAVA编写用于企业知识库管理协同软件&#xff0c;多用于构建企业内部WIKI&#xff0c;支持多人协作&#xff0c;共享信息等。 当前系统环境Centos7.9&#xff0c;内存至少2G以上&#xff0c;数据库采用MySQL5.7&#xff0c;本机电脑系统Windows10 安装前准备…

uboot图形化配置界面添加自定义菜单

一. 简介 图形化配置工具的主要工作就是在 .config 下面生成前缀为“ CONFIG_ ”的变量&#xff0c;这些变量一般都要值&#xff0c;为 y &#xff0c; m 或 n &#xff0c;在 uboot 源码里面会根据这些变量来决定编译哪个文件。 本文我 们就来学习一下如何添加自己的自…

十大排序算法(C语言)

参考文献 https://zhuanlan.zhihu.com/p/449501682 https://blog.csdn.net/mwj327720862/article/details/80498455?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169837129516800222848165%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&…

汽车行驶性能的主观评价方法(1)-底盘校准方法

底盘校准的目的是&#xff0c;从行驶性能和行驶舒适性两个方面进行协调&#xff0c;从而优化行驶动力学特性。为了达到这一目标&#xff0c;工程人员早在设计阶段&#xff0c;就对大多数对行驶动力性有重要意义的部件提出了要求。这些要求不仅与底盘的组件有关&#xff0c;还必…