2024-3-30 网易雷火笔试题题解(A~C)

一小时写了A~C 剩下两小时没调出D的 最后D还是0分

A

题目描述

网易在从两年前开始对司龄1,3,6,10年的员工发纪念积木,今年决定补发以前没有补发的积木,问还各个类型的积木需要多少个

输入描述:

第一行输入一个N (1<=N<=10000),表示雷火的员工数量。

接下来一行是N个整数(1<=司龄<=20),表示每个员工今年达到的司龄。

思路:

暴力特判前两年有没有发过那几个奖品

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;

#define _for(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
int cnt[4];
int main(void)
{
    int n;
    scanf("%d",&n);
    _for(i,1,n)
    {
        int x;
        scanf("%d",&x);
        if(x>=1) cnt[0]++;
        if(x>=3) cnt[1]++;
        if(x>=6) cnt[2]++;
        if(x>=10) cnt[3]++;
        if(x-1==1) cnt[0]--;
        if(x-1==3) cnt[1]--;
        if(x-1==6) cnt[2]--;
        if(x-1==10) cnt[3]--;
        if(x-2==1) cnt[0]--;
        if(x-2==3) cnt[1]--;
        if(x-2==6) cnt[2]--;
        if(x-2==10) cnt[3]--;
    }
    _for(i,0,3) printf("%d ",cnt[i]);
}

B:(O(NlogN)解法)

题目描述:

初始有一个长度为1的文本,我们可以采用Ctrl A全选文本,Ctrl S选中单个文本,Ctrl C复制文本,Ctrl V粘贴文本,问给n个k,对于每个k得到一个长度为k的文本至少需要多少次。

思路:

当我们得到一个长度为x的串后,我们可以通过该串全选一次,复制一次,然后粘贴若干次后,去更新其他值(该部分时间复杂度与欧拉常数有关,总体复杂度为O(nlogn)),也可以通过该数字,选中单个文本一次,复制一次,粘贴若干次,去更新其他值(由于更新条件是dp[r]-dp[l]>r-l+2,因此可以构造val[x]=dp[x]-x,因此,我们可以维护val[x]的最小值mn,当val[i]>mn+2时,我们可以将dp[i]更新为mn+2+i,由于对于数组每个元素,可以O(1)求解,该部分的时间复杂度为O(n))。综上,总体复杂度为O(n),(复杂度中与n表示数据范围)

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;

#define _for(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
const int lim=16384;
int dp[lim];
int val[lim];
inline void funct()
{
    memset(dp,1,sizeof(dp));
    dp[1]=0;
    int mn=1000000000;
    for(int i=1;i<lim;i++)
    {
        dp[i]=min(dp[i],mn+2+i);
        val[i]=dp[i]-i;
        mn=min(val[i],mn);
        for(int j=i+i,cnt=3;j<lim;j+=i,++cnt)
        {
            dp[j]=min(dp[i]+cnt,dp[j]);
        }
    }
}
int main(void)
{
    int T;
    scanf("%d",&T);
    funct();
    // _for(i,1,16) printf("%d: %d\n",i,dp[i]);
    while(T--)
    {
        int x;
        scanf("%d",&x);
        printf("%d\n",dp[x]);
    }
}

C

题目简述:

有一个战斗力为p的玩家,以及一个n个怪物(怪物按战斗力正序输入),m个BOSS,可以耗费1cost,击败一个战斗力小于自己的非BOSS怪物,然后获得该怪物的战斗力,也可以耗费1cost,使得自己的战斗加上p/10,问,对于每个BOSS,如果需要击败该BOSS,需要消耗几cost

思路:

将能打过的所有怪物存入优先队列中,每次战斗力更新后,是否有新增可打败怪物,倘若有则更新可以战胜怪物列表。给BOSS存入优先队列(小根堆)中,当队列顶的BOSS不能打败时,考虑如何提升战斗力,为了使提升的战斗力最大化,我们可以看可战胜怪物中战斗力最高的怪物与p/10谁大,去决定打怪物还是让自己战斗加上p/10。直到所有BOSS的结果都计算出为止

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;

#define _for(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)

#define MAXN 100050
int monster[MAXN];
int ans[MAXN];
class node
{
public:
    int request,id,ans;
    node(int _request,int _id)
    {
        request=_request;
        id=_id;
        ans=0;
    }
    bool operator <(const node& b)const&
    {
        return b.request<request;
    }
};
priority_queue<node> BOSS_queue;
priority_queue<int> monster_queue;
int p,n,m;
inline void update_monster_queue(int &place,int x)
{
    for(place;place<=n&&monster[place]<x;place++)
    {
        monster_queue.push(monster[place]);
    }
}
int main(void)
{
    scanf("%d%d%d",&p,&n,&m);
    
    _for(i,1,n)
    {
        scanf("%d",&monster[i]);
    }
    _for(i,1,m)
    {
        int x;
        scanf("%d",&x);
        BOSS_queue.push(node(x+1,i));
    }
    int place=1;
    int cnt=0;
    update_monster_queue(place,p);
    while(!BOSS_queue.empty())
    {
        node now_BOSS=BOSS_queue.top();
        printf("%d %d\n",now_BOSS.id,now_BOSS.request);
        while(p<now_BOSS.request)
        {
            ++cnt;
            if(!monster_queue.empty()&&monster_queue.top()>p/10)
            {
                p+=monster_queue.top();
                monster_queue.pop();
            }
            else
            {
                p+=p/10;
            }
            update_monster_queue(place,p);
        }
        ans[now_BOSS.id]=cnt;
        BOSS_queue.pop();
    }
    _for(i,1,m)
    {
        printf("%d\n",ans[i]);
    }
}

全部评论
之前做鹰角的笔试就试着写过大模拟,非常恶心,今天看见雷火的大模拟直接关了太烦了
3 回复 分享
发布于 2024-03-30 17:55 北京
D没看题就交了,,大模拟好恶心的
1 回复 分享
发布于 2024-03-30 17:43 陕西
请问编程语言可以用java吗
点赞 回复 分享
发布于 04-13 14:02 浙江
佬,请问三个小时的笔试 就只有4个算法题嘛
点赞 回复 分享
发布于 2024-04-26 12:54 山东
感觉写D有种写猪国杀的感觉(
点赞 回复 分享
发布于 2024-03-30 17:33 湖南

相关推荐

OPPO&nbsp;笔试挺简单的&nbsp;一面就纯聊天&nbsp;遂挂?摩尔线程&nbsp;一面主问C++八股&nbsp;还行&nbsp;项目有个和编译相关的&nbsp;当时觉得还行&nbsp;无后续&nbsp;猜测学历不够央视&nbsp;部门挺多&nbsp;有个线下面试拒了&nbsp;还有个线上面试最近面完中兴&nbsp;投递无后续字节&nbsp;Java八股准备不充分&nbsp;还有一点当时面试官应该是压力面&nbsp;对一些我觉得毫无疑问的点产生质疑&nbsp;导致我后续回答混乱腾讯&nbsp;TEG面试&nbsp;我不知道是没hc了还是别的不知名原因。。。&nbsp;复活赛win小米&nbsp;笔试我记得不简单&nbsp;无后续&nbsp;官网无变化&nbsp;这种是真的exTP&nbsp;一面无后续&nbsp;但我看同校有人oc了&nbsp;maybe我太菜了美团&nbsp;笔试还行&nbsp;一志愿好像是我base地的问题没有面试&nbsp;二志愿移动端我表现的太过于排斥了&nbsp;一周后挂滴滴&nbsp;好像我自己2了&nbsp;有个流程我超时挺久的&nbsp;无后续恒生&nbsp;流程走完&nbsp;最后没人联系应该是g海康威视&nbsp;lj公司&nbsp;我记得投的是后端&nbsp;投完秒挂&nbsp;什么东西360&nbsp;hr面拒&nbsp;腾讯开了&nbsp;也不是很想去北京云智&nbsp;后端一志愿不匹配666&nbsp;后续别的志愿懒得等了京东&nbsp;JDS&nbsp;TET笔试都过&nbsp;后续太慢都没安排pdd&nbsp;3月投的&nbsp;4月底安排一面&nbsp;最近发二面通知&nbsp;要是早点的话还能拿去和腾讯a招银&nbsp;流程走完&nbsp;末位淘汰国企&nbsp;听说全是卷工时&nbsp;慎重快手&nbsp;第一次&nbsp;二面挂&nbsp;口述IM系统&nbsp;面试官说我做的太简单了遂挂&nbsp;二志愿&nbsp;一面过&nbsp;无后续xkl&nbsp;三道笔试题&nbsp;前两道a&nbsp;第三题部分&nbsp;无后续&nbsp;看网上说有的秋招都没发offer&nbsp;我一直没进资料评审蚂蚁&nbsp;不懂蚂蚁要干啥anker&nbsp;也是nt&nbsp;把我从一个部门塞到另一个&nbsp;重点我面试流程都没开啊????&nbsp;金山&nbsp;拒绝dp&nbsp;聊薪拒满帮&nbsp;笔试溜了科大讯飞&nbsp;笔试全a&nbsp;复筛挂?深信服&nbsp;笔试全a&nbsp;后续太慢&nbsp;没关注了美的&nbsp;神人公司&nbsp;笔试做了30分钟结束&nbsp;全a&nbsp;性格测试完遂挂&nbsp;第二次同一个岗位&nbsp;笔试做了40分钟&nbsp;有一道题a了一半&nbsp;还没第一次好呢&nbsp;过了,面试遂拒步步高&nbsp;拒&nbsp;&nbsp;&nbsp;&nbsp;小结:可能有遗漏,记得不太清楚了,总体来说初期八股准备不充分&nbsp;后续基本都能走到靠后的流程&nbsp;刚开始还是挺慌的,接到第一个聊薪就好很多了,但是冷静下来还是拒了,我准备的方向基本就是Java和C++以及数据库中间件,死记硬背+理解,手撕的话,我leetcode&nbsp;刷了100道,后续就不刷了游戏公司:游卡&nbsp;二面拒完美&nbsp;二面过米哈游&nbsp;忘记了可能是笔试做的不好雷火&nbsp;笔试a2道&nbsp;挂&nbsp;别的不说&nbsp;lj监测平台途游&nbsp;一面还行&nbsp;无后续巨人网络&nbsp;笔试溜了4399&nbsp;一面面完不等了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小结:游戏公司对我面试最有用的是游卡,虽然不排除pua我的成分,但是也给我指明了一些准备方向,相关经历以及对于游戏引擎的了解必不可少,unity和ue任一推荐unity,因为ue难,游戏公司一般都是C++,所以八股其实还好。&nbsp;&nbsp;&nbsp;&nbsp;有问题很乐意回答,春招看着牛客过来的,知道牛友的不易,不嫌弃的话可以给一些建议,大家都加油,都有光明的未来
点赞 评论 收藏
分享
1)手撕:给定字符串,求不含重复字符的最长子串长度,并打印这个子串//哈希Set配合双指针private&nbsp;static&nbsp;String&nbsp;findLongestSubstring(String&nbsp;s)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;n&nbsp;=&nbsp;s.length();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;left&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;maxLength&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;longestSubstring&nbsp;=&nbsp;&quot;&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set&lt;Character&gt;&nbsp;charSet&nbsp;=&nbsp;new&nbsp;HashSet&lt;&gt;();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;right&nbsp;=&nbsp;0&nbsp;;&nbsp;right&nbsp;&lt;&nbsp;n&nbsp;;&nbsp;right&nbsp;++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(charSet.contains(s.charAt(right))){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;charSet.remove(s.charAt(left));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;left++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;charSet.add(s.charAt(right));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(maxLength&nbsp;&lt;&nbsp;right&nbsp;-&nbsp;left&nbsp;+&nbsp;1){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxLength&nbsp;=&nbsp;right&nbsp;-&nbsp;left&nbsp;+&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;longestSubstring&nbsp;=&nbsp;s.substring(left&nbsp;,&nbsp;right&nbsp;+&nbsp;1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;longestSubstring;&nbsp;&nbsp;&nbsp;&nbsp;}2)如何设计一个秒杀系统?从以下角度考虑:1.高性能架构;采用分布式架构,消息队列来削峰填谷,服务的降级和熔断 2.高并发的处理能力:商品库存扣减的多线程安全问题,采用redisson分布式锁,缓存预热3.用户体验升级:websocket实现秒杀倒计时同步,消息队列实现秒杀结果实时反馈,针对ip地址,设备指纹和访问频率的限制实现防作弊系统4.数据一致性保障;数据库分库分表,本地消息表5.监控报警:监控系统,报警系统,日志系统,异常日志收集,分布式追踪系统6.安全防护、成本控制3)String&nbsp;StringBuffer&nbsp;StringBuilder区别String是不可变类,线程安全,每次修改字符串都会创建新的字符串,效率比较低StringBuffer是可变类,直接在原字符串上修改,使用了Synchronized实现同步,效率也比较低,适合多线程场景StringBuilder是可变类,线程不安全,效率比较高,适合单线程场景4)数据库字段char和varchar区别char:定长字符串,存储长度为1~255个字符,存储空间固定为255字节,不足用空格补,适合固定长度的字段,便于数据库读取和优化varchar:可变字符串,存储长度为1~65535个字符,存储空间为实际长度+长度字节5)索引失效的情况索引失效是指数据库在查询过程中无法有效利用已建立的索引,导致查询性能下降,甚至退化为全表扫描的情况。查询条件中使用了函数或表达式对索引列进行操作;使用了OR条件且未对所有分支列建立索查询条件中使用了NOT、&lt;&gt;、!=等否定操作符;对索引列进行了模糊查询(如LIKE&nbsp;'%abc%'),且通配符位于开头;查询条件中列的顺序与复合索引的列顺序不匹配;或者查询时数据类型不匹配导致索引无法使用。6)数据库的事务隔离级别读未提交:允许读取尚未提交的数据,可能导致脏读、幻读、不可重复读读已提交:允许读取已提交的数据,不能保证数据一致,可能导致幻读和不可重复读可重复读:允许读取已提交数据,可能导致幻读串行化:保证数据一致性,但是并发度和性能低7)Redis的常用数据类型,分别存储哪些东西?String:存储字符串,比如用户名、密码和验证码等哈希:哈希表,可以存储用户信息,商品信息等List:存储有序的元素,比如消息队列和日志记录Set:集合,可以做去重排序或求交集等Zset:带得分排序的集合,可以做用户或者流量等的排行榜8)Redis的锁机制基于SETNX命令,将锁名称作为键,客户端唯一标识(UUID)作为键值,使用完锁后DEL释放锁&nbsp;&nbsp;&nbsp;&nbsp;因不可冲入可能存在死锁和不及时释放锁的情况,可以释放锁时检查锁值是否为自己的UUID以及添加过期时间基于Lua脚本,使用原子SET命令和Lua脚本的事务性,但仍存在锁续期困难和业务超时锁释放风险基于Redisson的分布式锁,支持可冲入锁和自动续期,提供公平锁、联锁和红锁9)HTTP1.0&nbsp;2.0&nbsp;3.0&nbsp;区别HTTP1.0:默认为短连接,每次请求都需要建立TCP连接,并通过Connection:&nbsp;keep-alive头来实现持久连接,不支持管道&nbsp;&nbsp;&nbsp;&nbsp;化,主要使用If-Modified-Since/Expires来做为缓存判断的标准;HTTP2.0:采用二进制格式而非文本格式,解析更加高效,支持多路复用允许单个TCP交错发送多个请求和响应,引入HPA&nbsp;&nbsp;&nbsp;&nbsp;CK压缩算法,对请求和响应的头部信息进行压缩,消除冗余,允许客户端为请求设置优先级HTTP3.0:&nbsp;最新的HTTP协议,基于QUIC协议,QUIC使用udp传输数据,不存在队头阻塞问题,首次连接后具备0RTT优&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;势,减少延迟,允许网络切换时,将连接迁移到新的IP地址,默认采用TLS加密,保证数据传输的安全性10)&nbsp;TCP的三次握手和四次挥手,为什么需要?三次握手:客户端向服务器发送SYN表示请求同步,服务器向客户端发送SYN+ACK表示确认收到同步请求,可以确保客户&nbsp;&nbsp;&nbsp;&nbsp;端的发送能力正常,客户端向服务器发送ACK表示确认,可以确认服务器的发送和接收能力以及客户端的接收能力正常,&nbsp;&nbsp;&nbsp;连接建立,通过三次握手能够保证通信双方的接收发送能力正常四次挥手:客户端发送FIN+x序列号表示请求关闭连接,服务器发送ACK+x+1表示确认收到,客户端向服务器的通道关&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;闭,服务器发送FIN+y序列号表示请求关闭连接,客户端发送ACK+y+1表示收到,等待2MSL没有收到回复后关闭TCP连接,因为TCP是全双工的,双向链路分别需要发送和接收两次,所以是需要四次挥手。11)&nbsp;从输入网址,到最后访问页面的全过程首先输入URL,进行URL解析,准备发送http请求在请求之前,先本地查看浏览器缓存,如果缓存有该资源,直接返回,否则继续准备请求发送请求之前,进行DNS域名解析,按照本地缓存,本地HOST,路由器缓存,DNS服务器,DNS根服务器顺序,直到查&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;询到URL对应的IP地址三次握手建立TCP连接构建请求并发送,包括请求行,请求头,请求体,并把和该域名相关的cookie放入请求头,构建HTTP请求,如果是https&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还要进行加密服务器处理请求,生成对应的响应并返回相应资源四次握手关闭TCP连接浏览器接收到响应后进行解析处理,如果是字节流可能是下载管理器进行下载,如果是html页面就是进行渲染生成页面。
查看11道真题和解析
点赞 评论 收藏
分享
评论
16
41
分享

创作者周榜

更多
牛客网
牛客企业服务