8.8 美团笔试

总共五道题,4+1的形式。

第一题,要特判等于0的情况,否则是91%

第二题,忘掉了。

第三题,对于a[i],找到之前小于它的最大的数,可以维护一个set,每次处理完当前a[i],就插入到set中。对于处理,可以直接利用set的lower_bound(val),然后根据迭代器减1判断情况。

第四题,任选x修改为y,使得序列前一半与后一半相同,可以处理出不同的 pair{ a[i] , a[i+n/2] },然后默认first为较小值,去一下重 ( 相同的对计算一次贡献 ),然后建立无向图。优先从入度小的点出发DFS,每走一步就是一个花费,图遍历完就得答案。

第五题,对换左右子树,这个可以直接用数组表示存二叉树,点值对应题目要求的点序号,下标0开始,初始时左右儿子分别为2*x+1,2*x+2,然后根据修改,分别修改Lchild和Rchild的指向。第五题代码还没删掉,如下。

#include<bits/stdc++.h>
using namespace std;
int a[100020];
typedef pair<int,int> pii;
int n,m,k;
int loc[100020];
struct node{
    int val;
    int L,R;
}p[10000];
struct pre{
    int L,R;
}has[10000];
void solve(int x) {
    if(x>=n) return;
    loc[p[x].val]=x;
    p[x].L=p[x].R=0;
    int cur=p[x].val;
    int Lval=has[cur].L;
    int Rval=has[cur].R;
    if(Lval) {
        p[x].L=2*x+1;
        p[2*x+1].val=Lval;
        solve(2*x+1);
    }
    if(Rval) {
        p[x].R=2*x+2;
        p[2*x+2].val=Rval;
        solve(2*x+2);
    }
}
void print(int x) {
    if(p[x].L) print(p[x].L);
    cout<<p[x].val<<" ";
    if(p[x].R) print(p[x].R);
}
int main()
{
    cin>>n>>m>>k;
    p[0].val=k;
    for(int i=1;i<=n;i++) {
        cin>>has[i].L>>has[i].R;
    }
    solve(0);
    for(int i=1;i<=m;i++) {
        int x;
        cin>>x;
        int id=loc[x];
        swap(p[id].L,p[id].R);
    }
    print(0);
}


#美团笔试##笔经##美团#
全部评论
hh 第四题还可以这样?服
点赞 回复 分享
发布于 2021-08-08 12:10
第三题用了set。。没用lower_bound找,过了36就TLE
点赞 回复 分享
发布于 2021-08-08 12:12
北京农商银行
校招火热招聘中
官网直投
我用set 也用了lowerbound,也tle了,大佬能看下代码吗🤨
点赞 回复 分享
发布于 2021-08-08 12:28
为啥,我是四道题,是我漏了一道吗
点赞 回复 分享
发布于 2021-08-08 12:39
4 + 1是什么意思?
点赞 回复 分享
发布于 2021-08-08 14:17

相关推荐

💼公司岗位Java开发工程师1.自我介绍2.项目问题:对订单库存是怎样设计的?答:(当时比较紧张第一遍说错了)当用户下单并且成功扣款时,会对库存进行修改,根据用户订单减少库存。不对...是用户提交订单会对减少库存,根据定时任务对用户是否完成付款进行判断,用户规定时间未完成付款则会回填库存。怎么防止库存超卖?答:在提交订单接口首先做了令牌桶算法进行限流,防止高并发情况的问题,然后添加了锁机制,将用户的主键加锁,保证一个用户只能同时提交一次订单,提交完订单会对库存进行修改,每次提交订单都会对库存进行判断,若有库存就可以提交没有则返回失败信息。怎么保证高并发的时候订单不会被超卖,假如我现在就1个库存,但是100个人同时请求这一个,怎么保证没有2个人抢到同1个库存的情况?答:(当时一脸懵)我在接口加了令牌桶算法进行限流,保证不会有多人都请求到这个商品,而且对用户主键进行加锁,让他们的操作是串行的,不会产生一个多次请求的情况。可能没有考虑的很全面,大概就是这么设计的(当时没有底气)3.谈一谈Java的反射答:我认为反射是框架的灵魂,很多现在的框架都是通过反射机制实现的,比如Spring,在SpringIoC中就用到了反射机制,Spring对Bean对象的管理和注册就是通过反射机制实现的。这是Spring中的反射,那你有用到过Java反射么?答:我平常项目中可能会调取一些private的类或者一些私有的方法可能用到反射,但是使用反射一定会有安全性问题,有的private本身就不是想被调用到的,我们可以使用:类class、new类.getClass()和Class.forName(&amp;quot;类全路径&amp;quot;)来获取到这个类。4.讲一下Spirng&nbsp;MVC的请求流程答:SpringMVC核心是DispatcherServlet,前端发送请求到DispatcherServlet,然后DispatcherServlet根据请求信息调用HandlerMapping,HandlerMapping解析请求找到对应的controller这里叫做Hander,并会将请求涉及到的拦截器和&nbsp;Handler&nbsp;一起封装,然后调用&nbsp;HandlerAdapter适配器执行&nbsp;Handler&nbsp;,请求处理后,会返回一个&nbsp;ModelAndView&nbsp;对象给DispatcherServlet,数据模型以及相应的视图的信息,现在的前后端分离的项目其实就已经结束了,会把数据返回到前端进行处理,以前的JSP等前后端不分离的会对view进行渲染等操作。5.讲一下MySQL数据库优化答:数据库优化可以从多个方面考虑,首先是物理层面对于数据库部署的服务器可选择内存较大的服务器,可以使用更好的存储引擎,比如现在MySQL的InnoDB,其次可以根据数据库是使用情况进行分库分表、读写分离等集群部署,然后可以对编写的SQL进行优化比如减少SELECT&nbsp;*,连表操作等SQL的编写,合理的使用索引等。我想问的是对数据库的优化,比如怎么加索引?答:对于数据库的索引是为了加速对表中数据行的检索而创建的一种分散的存储结构,数据库没有索引就会走表进行全表扫描,我们去优化一条SQL并添加索引的时候,可以先去找到慢SQL,根据SQL编写进行分析添加合适的索引,在MySQL的日志中使用show&nbsp;variables&nbsp;like&nbsp;‘%slow_query_log%定位慢SQL,并使用explain关键字进行分析,可以SQL中是否用到索引。我们添加索引可以根据主键ID进行添加主键索引,因为主键一般是连续且唯一的。若SQL列中有长字符串或者是文本可以为这列添加上全文索引。对于用的比较多的列或者是查询速度很慢的SQL可以对他们where条件里面的列添复合索引,但是要把比较常用的列放到最左侧,因为复合索引有最左匹配原则,若查询的列不在最左侧可能不会使用索引。6.RabbitMQ和Rocket&nbsp;MQ的区别答:RabbitMQ是开源的对于学生来说比较友好,RocketMQ是对于企业的性能更好。他们都是高可用的,相对来说RabbMQ的时效性更好延迟最低,RocketMQ的稳定性更好,吞吐量更大。7.了解RocketMQ的架构实现吗?答:RocketMQ不太了解,我知道RabbitMQ,RabbitMQ核心主要是个队列,消息生产者产生消息后会发送给RabbitMQ的交换机,交换机接收到消息,并将消息路由到队列中,队列存储消息,等待消费者处理,将交换机和队列连起来进行一个绑定,消费者订阅队列进行消费。8.反问面试官比较随意,面试的氛围还是很好的,但是感觉有些不想听,(可能是我个人理解),不知道这是KPI面还是什么原因,我回答的还算比较流畅,最后可惜没有通过,不知道现在该往什么方向准备了。有大神帮我指点一下么,回答的问题望大家能指出#牛客解忧铺##面试# #凉经##大厂##找工作#
闪送一面3人在聊 查看10道真题和解析 牛客解忧铺
点赞 评论 收藏
分享
4 17 评论
分享
牛客网
牛客企业服务