美团2024年秋招第一场笔试算法题题解【技术】

写一下2024年美团秋招第一场笔试算法题解,先贴个测评和题目链接美团2024秋招第一场笔试,还是比较简单的,前两题都是模拟,其中第二题涉及点思维,第三题笔者看到有牛友用持久化线段树和dp做的,但是我还不咋会主席树哈哈,于是给大家提供一种很巧妙的模拟做法,希望可以对大家有所帮助~~~(ak美团笔试题就可以去美团送外卖了)——不说了,我快超时了-----

最近开始开始重开java后端开发了,兜兜转转还是java选手,我打算以后多更新大厂算法笔试的题解~~~~欢迎大家讨论交流和支持,蟹蟹~~~

目录

A题

题面

思路分析

代码实现

B题

题面

思路分析

代码实现

C题

题面

思路分析

代码实现


 

A题

题面

f91b55b41da14a3aa5d2207099906999.png

37f75fa2a7f649f3ac4b1fae39c85697.png

思路分析

直接模拟就行,判断数字可以用isdigit函数,判断字母可以用alpha函数。

代码实现

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long 
#define x first 
#define y second 
using namespace std;
int f(string s)
{
    int cnt1 = 0;
    int cnt2 = 0;
    int cnt3 = 0;
    //int flag = 0;
    for(int i = 1; i < s.size(); i++)
    {
        if(isdigit(s[i])) cnt1 ++;
        else if((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')) cnt2 ++;
        else cnt3++;
    }
    if(cnt1 == s.size() - 1) return  1;
    else if(cnt2 == s.size() - 1) return 2;
    else if(cnt3 == 0) return 3;
    else return 4;
}
void solve()
{
    string s;
    cin >> s;
    if(isdigit(s[0]) && f(s) == 2) cout << "special" << endl;
    else if(isalpha(s[0]) && f(s) == 1) cout << "standard" << endl;
    else if(isalpha(s[0]) && f(s) == 3) cout << "mix" << endl; 
    else cout << "invalid" << endl;
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t;
    cin >> t;
    while(t -- )  solve();
    return 0;
}

B题

题面

13a194b1158f4ec68069c37e36f2cefc.png

e0d4b5b060ed465db56298f97476b0c8.png

思路分析

做这题最开始笔者想歪了,开个map把每个字符串数量统计进去,然后开了个字符串数组还对字符串排个序 ,但是发现这样对解这道题一点用没有,于是仔细看看题目,我们梳理一下题意,题目让我们求最少和最多比较次数,首先我们应该明白最少操作次数为1,第二点重要的是一定是从比小于正确密码长度的字符串开始比较的,如果发现不匹配则再次碰到这样的字符串我们就不再比较,于是我们有如下思路:

1.开一个哈希表set,记录有没有添加过该密码,至少需要尝试1次

2.如果输入的密码长度小于真实密码且未出现过,一定会被尝试,两个都加一次

3. //如果输入的密码长度等于真实密码且未出现过,最多的加一次就行了,因为算最少我们一次就能匹配成功,所以x不用加。

下面我们看看完整代码就明白了——

代码实现

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
#include <cstring>
#include <string>
#include <vector>
#include <unordered_set>
#define int long long 
#define x first 
#define y second 
using namespace std;

void solve()
{
     int n;
     cin >> n;
     string str;
     cin >> str;
     unordered_set<string> st;//记录有没有添加过该密码
     int x = 1;//至少需要尝试1次
     int y = 0;
     while(n -- )
     {
        string s;
        cin >> s;
        //如果输入的密码长度小于真实密码且未出现过,一定会被尝试,两个都加一次
        if(s.size() < str.size() && st.count(s) == 0) 
        {
             x++;
             y++;
             st.insert(s);
        }
        //如果输入的密码长度等于真实密码且未出现过,最多的加一次就行了
        if(s.size() == str.size() && st.count(s) == 0) 
        {
            y++;
            st.insert(s);
        }
     }
     cout << x << " " << y << endl;
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t = 1;
    while(t -- )  solve();
    return 0;
}

C题

题面

93bbdc14631c4a22b768e99078aaf663.png

c049c6105f6840499f00bffab5d56819.png

思路分析

这题笔者也不知道本题出题的std是什么,应该很多种做法,看到了可持久化线段树,dp等做法,但是大家好像大多还是模拟来做的,这里贴一种巧妙的做法,妙在反着去判断当前数组中不包含的最小非负整数,利用一个while循环和一个set容器,我们for循环倒着遍历,依次删除前j个元素,然后再将剩下的元素按照MEX(a) * k删除,MEX(a)就用set不断地insert剩下的每个元素,从最开始ans = 0维护,如果set里存入了后面的数,我们将ans++即可,最后跳出循环的ans即为剩下数组里不存在的最小非负整数,我在代码中把样例的x,j,k,ans都输出了,方便理解,仔细看看代码其实也就明白了,完成了上面操作,我们不断求花费值然后更新最小值就行了——

代码实现

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <unordered_set>
#define int long long 
#define x first 
#define y second 
using namespace std;

void solve()
{
    int n,k,x;
    cin >> n >> k >> x;
    vector<int> vc(n);
    set<int> st;
    for(int i = 0; i < n; i++) cin >> vc[i];
    int minx = x * n;  // 依次删除第一个元素
    int ans = 0;
    //反着去判断当前数组中不包含的最小非负整数
    for(int j = n - 1; j >= 0; j--)
    {
        st.insert(vc[j]);
        while(st.count(ans)) 
        {
            ans++;
        }
        //依次删除前j个元素再将剩下的元素按照MEX(a) * k删除
        //cout << x << " " << j << " " << k << " " << ans << endl;
        int p = x * j + k * ans;
        //cout << p << endl;
        minx = min(minx , p);
    }
    cout << minx << endl;
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int t;
    cin >> t;
    while(t -- )  solve();
    return 0;
}
/*
    input:
    1
    6 3 3
    4 5 2 3 1 0
    output:
       3 5 3 1
       18
       3 4 3 2
       18
       3 3 3 2
       15
       3 2 3 4
       18
       3 1 3 4
       15
       3 0 3 6
       18
15(最小值)

*/


最后感谢大家的观看,点个赞加关注再走吧~~拜拜喽~

 

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

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

相关文章

目前最好用的爬虫软件是那个?

作为一名数据工程师&#xff0c;三天两头要采集数据&#xff0c;用过十几种爬虫软件&#xff0c;也用过Python爬虫库&#xff0c;还是建议新手使用现成的软件比较方便。 这里推荐3款不错的自动化爬虫工具&#xff0c;八爪鱼、亮数据、Web Scraper 1. 八爪鱼爬虫 八爪鱼爬虫是一…

R语言非参数回归预测摩托车事故、收入数据:局部回归、核回归、LOESS可视化...

全文链接&#xff1a;https://tecdat.cn/?p37784 非参数回归为经典&#xff08;参数&#xff09;回归方法提供了一种灵活的替代方法。与假定回归关系具有依赖于有限数量的未知参数的已知形式的传统&#xff08;参数&#xff09;方法不同&#xff0c;非参数回归模型尝试从数据样…

java后端项目技术记录

后端使用技术记录 一、软件1. apifox&#xff0c;API管理软件问题 2. nginx前端服务器(1) 反向代理(2) 负载均衡 二、问题1. 使用spring全局异常处理器处理特定的异常2. 扩展springmvc的消息转换器&#xff08;对象和json数据的转换&#xff09;3. 路径参数的接收4. 实体构建器…

YOLOv8改进,YOLOv8改进损失函数采用Powerful-IoU(2024年最新IOU),助力涨点

摘要 边界框回归(BBR)是目标检测中的核心任务之一,BBR损失函数显著影响其性能。然而,观察到现有基于IoU的损失函数存在不合理的惩罚因子,导致回归过程中锚框扩展,并显著减缓收敛速度。为了解决这个问题,深入分析了锚框扩展的原因。针对这个问题,提出了一种新的Powerfu…

ant design vue中带勾选表格报Tree missing follow keys: ‘undefined‘解决方法

1、这里一定要给columns和data-source设置key即可。 <div><a-table:row-selection"rowSelection":dataSource"tableList":columns"columns":scroll"{ x: 100% }":pagination"false":loading"loading"&g…

IDEA插件:Maven Helper插件强势优化【某个依赖包被哪些maven项目模块引用,快速定位】体验真好!

背景&#xff1a; 开发的项目是maven多模块&#xff0c;子模块数量多&#xff0c;已经超过10个。 而且经常会被扫描漏洞&#xff0c;并进行依赖包升级。 在使用过程中&#xff0c;发现MavenHelper插件和IDEA自带的Analyze Dependencies都有个缺点&#xff1a;只能是单个模块…

解决Ubuntu无法找到python3.7的包的问题 E: Couldn‘t find any package by glob ‘python3.7‘

该问题可能是由于默认的 Ubuntu 存储库中没有 Python 3.7 相关的包或系统配置的问题。可以尝试以下方法解决问题&#xff1a; 1. 使用 deadsnakes PPA 添加 Python 3.7 支持 deadsnakes PPA 是一个第三方存储库&#xff0c;提供多版本的 Python 支持&#xff0c;包括 Python …

第十四周学习周报

目录 摘要Abstract1. LSTM的代码实现2. 序列到序列模型3. 梯度与方向导数总结 摘要 在上周的学习基础之上&#xff0c;本周学习的内容有LSTM的代码实现&#xff0c;通过对代码的学习进一步加深了对LSTM的理解。为了切入到transformer的学习&#xff0c;本文通过对一些应用例子…

【Docker】如何让docker容器正常使用nvidia显卡

首先确保宿主机正常安装了显卡驱动 nvidia-smi打印显卡信息如下&#xff1a; 安装nvidia-container-toolkit工具 sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit sudo systemctl restart docker运行如下命令测试显卡是否在容器内可用 …

如何去编写一个好的单元测试,通义灵码是如何快速生成单元测试?

本文首先讲述了什么是单元测试、单元测试的价值、一个好的单元测试所具备的原则&#xff0c;进而引入如何去编写一个好的单元测试&#xff0c;通义灵码是如何快速生成单元测试的。 通义灵码插件下载安装&#xff1a;通义灵码_智能编码助手_AI编程-阿里云 目录 什么是单元测试&…

产品管理- 互联网产品(5):运营知识与技能

了解运营 1、运营的基础是产品认清受众&#xff0c;切实解决问题、用户需求 2、运营活动贯穿产品的整个生命周期 3、找准用户&#xff0c;建立MVP 4、明确产品的应用场景。用户在何场景下基于何种需求使用产品&#xff1f;务必短流程 5、AARRR模型 6、运营管理流程类似产品管理…

如何获取钉钉webhook

第一步打开钉钉并登录 第二步创建团队 并且 添加自定义 机器人 即可获取webhook

MongoDB入门:安装及环境变量配置

一、安装MonggoDB Windows系统安装MongoDB 1、下载MongoDB安装包 访问MongoDB官方网站&#xff0c;选择与Windows系统相匹配的MongoDB Community Server版本进行下载。 Download MongoDB Community Server | MongoDB 2、安装MongoDB 双击下载好的安装包文件&#xff0c;根…

个人健康管理小程序(源码+参考文档+定制)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

5. 常用开源数据集快速导入Linux服务器(AutoDL)——深度学习·科研实践·从0到1

目录 1. 查找公开数据 2. 解压到自己的数据盘中 3. 解压常用指令 1. 查找公开数据 参考文档&#xff1a;AutoDL帮助文档-公开数据查找和导入 AutoDL提供了部分常用开源数据&#xff0c;供咱在实例中进行使用&#xff0c;免去下载上传的烦恼&#xff08;直接解压到咱的服务…

网页WebRTC电话和软电话哪个好用?

关于WebRTC电话与软件电话哪个更好用&#xff0c;这实际上取决于多个因素&#xff0c;并没有一个绝对的答案。不过&#xff0c;我可以根据WebRTC技术的一些特点&#xff0c;以及与传统软件电话相比的优劣势&#xff0c;为你提供一个清晰的对比。 首先&#xff0c;让我们了解一下…

晶圆厂如何突破多网隔离实现安全稳定又快速的跨网域文件传输?

在当今数字化时代&#xff0c;晶圆厂作为高科技产业的核心&#xff0c;其生产效率和数据安全性直接影响到整个半导体行业的竞争力。晶圆厂内部网络通常被划分为多个安全域&#xff0c;如生产网络、研发网络、办公网络等&#xff0c;以确保数据安全和防止敏感信息泄露。然而&…

外设管控策略分享 | 如何进行USB外设管控?三款USB接口管控软件推荐!

USB外设&#xff0c;作为数据传输的重要媒介&#xff0c;既带来了便捷&#xff0c;也潜藏了风险。 如何有效进行USB外设管控&#xff0c;防止数据泄露&#xff0c;成为企业管理的重要课题。 本文将分享外设管控的策略&#xff0c;并推荐三款USB接口管控软件&#xff0c;助您构…

CSS宽度和高度

CSS 尺寸属性指的就是元素的宽度和高度属性&#xff0c;虽然说非常简单&#xff0c;但却是必须掌握的技能。CSS 中提供了 width、height、max-width、min- width、max-height 和 min-height 等几个属性来设置元素的宽度和高度&#xff0c;这些元素使用起来非常简单&#xff0c;…

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】

【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【上篇】 一、TFLM是什么&#xff1f;二、TFLM开源项目2.1 下载TFLM源代码2.2 TFLM基准测试说明2.3 TFLM基准测试命令 三、TFLM初步体验3.1 PC上运行Keyword基准测试3.2 PC上运行Person detection基准测试3.3 No module nam…