华为4.13笔试题解(附原题)

华为4.13技术笔试 原题在最后
题目1:服务器调度,优先级排序
题目2:工单选择策略,贪心+优先级队列
题目3:分糖果,0-1背包dp、求等和子集

第一题比较简单,先筛选出符合要求的服务器,再按不同的需求策略排序就可以。需要注意的是几个细节:1.arch=9/np=2时满足所有arch/np  2.输出按序号排序而不是优先级队列里的排序  3.着重注意输出空格

第二题首先按贪心的思想,用时间戳记录当前已用的时间,每次选择最近sla时间的分值最大的工单,这种做法可以ac30%,但是存在情况[(1,1),(2,10),(2,11)]用贪心得到11而答案是21。所以我们用一个最小堆来储存所有选择过的工单,称为chosen_list。每当有未完成的工单过期时,我们将此工单和chosen_list里最小分值的工单比较,若此工单大于chosen_list里的最小工单,则用此工单代替最小工单。这道题思路与力扣630课程表三非常接近,可以好好看看。

第三题所有糖果总数的一半为target,求等和子集。用dp[i][j]表示用前i袋糖(含i)能否凑到j块糖,答案即为dp[N][target]。递推公式dp[i][j] = dp[i-1][j - bags[i-1]] or dp[i-1][j],bags[i-1]表示第i袋糖中的糖果数。初始化边界条件dp[:][0]=True即可,思路和力扣416完全一致。这道题还有一个问题是需要输出两个子集,dp的时候记录路径就行,可以把dp矩阵中的元素改成一个(真值,列表)对,即(is_possible, chosen),is_possible为原dp矩阵的值表示能否凑足,chosen储存凑足所用的袋标号,递推公式变为:
if dp[i-1][j][0] == True:
dp[i][j] = dp[i-1][j]
elif dp[i-1][j - bags[i-1]] == True:
dp[i][j] = (True, dp[i-1][j - bags[i-1]][1] + [i])
else:
dp[i][j] = (False,[])
递推的时候注意列表的深拷贝(针对python玩家)
好像还有可回溯的DFS做法,懒得想了留给评论区补充
但是这道题好像判题的时候有问题?看牛客上的老哥们好多都是一顿操作猛如虎,一点提交百分之五(俺也一样),不知道是不是哪个细节没注意到,已经反馈给HR,看看那边怎么说

深夜睡不着起来码题解,脑子不太清醒,如果有错误欢迎老哥们指出

/***************************************************************************************************/

附原题题目:(按记忆写的可能有偏差)
第一题:
每个服务器有如下属性:index,cpuCount,memSize,arch=0~9,np=0~2
输入N行这样的服务器参数
输入1行需求,按如下格式:
策略s,需要服务器的数量m,cpu,mem,arch_,np_
符合要求的服务器要求:cpuCount >= cpu, memSize >= mem, arch == arch_, np == np_, 其中若np=2表示满足所有np要求,arch=9表示满足所有arch要求
有如下两种分配策略:
策略1:cpu优先,即优先分配符合要求的且具有最小cpuCount的服务器,再次按mem分配,再次按编号
策略2:mem优先,即优先分配符合要求的且具有最小memSize的服务器,再次按cpu分配,再次按编号
输出分配的服务器编号,如可分配的数量多于m则按上述策略排序选择前m个,若少于m个则输出全部符合要求的服务器,输出顺序按服务器编号排序
例:
输入:
5
0 4 330 4 1
1 3 300 0 1
2 5 500 0 1
3 4 350 9 1
4 6 340 0 2
1 2 3 330 0 1
输出:
2 3

第二题:
找到原题了,这个帖子里写的解法是错的
输入若干工单,每个包含SLA时间和score,即在规定SLA时间内完成该工单可以获得对应score,超时不得分,每个工单需要一个小时来完成,返回可以获得的最大得分
例:
输入:
5
1 3
1 5
3 5
4 5
3 2
输出:
15(完成第2,3,4个工单)

第三题:
现有若干袋糖果,想把这些糖果平分给两个小朋友,每袋糖果只能分给一个小朋友且不能拆开,返回每个小朋友分得的糖果数,每个小朋友分到的各袋糖果的糖果数,输出顺序不限,如不能平均分则直接输出-1(题目存疑)
输入为每袋糖果的糖果数量
例:
输入:
3 5 7 2 5 8
输出:
15
7 8
3 5 2 5
#华为笔试##春招##实习##笔试题目##笔经##Python##题解#
全部评论
最后一题输出-1就是百分之五好像哈哈
2 回复 分享
发布于 2022-04-14 10:21
第一题最后忘按序号排序,心态直接炸穿
1 回复 分享
发布于 2022-04-14 21:58
https://blog.nowcoder.net/n/3478536c315c44359fd4cd7df7ddee77 第二题我想了一种解法但是不知道对不对
1 回复 分享
发布于 2022-04-14 18:33
向大佬学习了
点赞 回复 分享
发布于 2022-04-15 01:09
过了的话需要主动联系hr发综测邮件吗?
点赞 回复 分享
发布于 2022-04-14 14:09
话说怎么知道自己过没过啊😢😢
点赞 回复 分享
发布于 2022-04-14 13:13
多少分可以过啊 好难
点赞 回复 分享
发布于 2022-04-14 10:58
码了再看
点赞 回复 分享
发布于 2022-04-14 10:46

相关推荐

点赞 评论 收藏
分享
头像
10-13 18:10
已编辑
东南大学 C++
。收拾收拾心情下一家吧————————————————10.12更新上面不知道怎么的,每次在手机上编辑都会只有最后一行才会显示。原本不想写凉经的,太伤感情了,但过了一天想了想,凉经的拿起来好好整理,就像象棋一样,你进步最快的时候不是你赢棋的时候,而是在输棋的时候。那废话不多说,就做个复盘吧。一面:1,经典自我介绍2,项目盘问,没啥好说的,感觉问的不是很多3,八股问的比较奇怪,他会深挖性地问一些,比如,我知道MMU,那你知不知道QMMU(记得是这个,总之就是MMU前面加一个字母)4,知不知道slab内存分配器->这个我清楚5,知不知道排序算法,排序算法一般怎么用6,写一道力扣的,最长回文子串反问:1,工作内容2,工作强度3,关于友商的问题->后面这个问题问HR去了,和中兴有关,数通这个行业和友商相关的不要提,这个行业和别的行业不同,别的行业干同一行的都是竞争关系,数通这个行业的不同企业的关系比较微妙。特别细节的问题我确实不知道,但一面没挂我。接下来是我被挂的二面,先说说我挂在哪里,技术性问题我应该没啥问题,主要是一些解决问题思路上的回答,一方面是这方面我准备的不多,另一方面是这个面试写的是“专业面试二面”,但是感觉问的问题都是一些主管面/综合面才会问的问题,就是不问技术问方法论。我以前形成的思维定式就是专业面会就是会,不会就直说不会,但事实上如果问到方法论性质的问题的话得扯一下皮,不能按照上面这个模式。刚到位置上就看到面试官叹了一口气,有一些不详的预感。我是下午1点45左右面的。1,经典自我介绍2,你是怎么完成这个项目的,分成几个步骤。我大致说了一下。你有没有觉得你的步骤里面缺了一些什么,(这里已经在引导我往他想的那个方向走了),比如你一个人的能力永远是不够的,,,我们平时会有一些组内的会议来沟通我们的所思所想。。。。3,你在项目中遇到的最困难的地方在什么方面4,说一下你知道的TCP/IP协议网络模型中的网络层有关的协议......5,接着4问,你觉得现在的socket有什么样的缺点,有什么样的优化方向?6,中间手撕了一道很简单的快慢指针的问题。大概是在链表的倒数第N个位置插入一个节点。————————————————————————————————————10.13晚更新补充一下一面说的一些奇怪的概念:1,提到了RPC2,提到了fu(第四声)拷贝,我当时说我只知道零拷贝,知道mmap,然后他说mmap是其中的一种方式,然后他问我知不知道DPDK,我说不知道,他说这个是一个高性能的拷贝方式3,MMU这个前面加了一个什么字母我这里没记,别问我了4,后面还提到了LTU,VFIO,孩子真的不会。
走呀走:华子二面可能会有场景题的,是有些开放性的问题了
点赞 评论 收藏
分享
评论
22
112
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务