记录华为OD面试与机试算法题

之前吐槽过华为OD的招聘,吐槽归吐槽,也写一下面试机试经历包括遇到的算法题和一些被问到的基础问题,我情况比较特殊大家可以酌情参考,写完发现有点多,面试算法题另外发一个帖子.
由于我是转码的,没有问项目,八股文都是基础内容,倒是没难为我.
机试
网上有原题,照搬过来
1.题目描述:
为了充分发挥GPU算力,需要尽可能多的将任务交给GPU执行。
现在有一个任务数组,数组元素表示在这1s内新增的任务个数,且每秒都有新增任务。
假设GPU最多一次执行n个任务,一次执行耗时1s,在保证GPU不空闲的情况下,最少需要多长时间执行完成。
输入描述:
第一个参数为GPU最多执行的任务个数,取值范围1-10000
第二个参数为任务数组的长度,取值范围1-10000
第三个参数为任务数组,数字范围1-10000
输出描述:
执行完所有任务需要多少秒
示例
输入:
3
5
1 2 3 4 5
输出:
6
说明:
一次最多执行3个任务 最少耗时6s
输入:
4
5
5 4 1 1 1
输出:
5
说明:
一次最多执行4个任务 最少耗时5s
(easy,从第一个数往后迭代即可,记录一下每次剩余的量留给下次,最后做一次剩余的处理)

2.题目描述:
现在有一队小朋友,他们高矮不同,,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。
我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高或者相等;每一个“矮”位置的小朋友要比相邻的位置矮或者相等;要求小朋友们移动的距离和最小,第一个从“高”位开始排,输出最小移动距离即可。
移动距离的定义如下所示:第二位小朋友移到第三位小朋友后面,移动距离为1,若移动到第四位小朋友后面,移动距离为2。
输入描述:
排序前的小朋友,以英文空格的正整数:4 3 5 7 8
小朋友<100个
输出描述:
排序后的小朋友,以英文空格分割的正整数:4 3 7 5 8
输出结果为最小移动距离,只有5和7交换了位置,移动距离都是1
示例:
输入:
4 1 3 5 2
输出:
4 1 5 2 3
输入:
1 1 1 1 1
输出:
1 1 1 1 1
说明:
相邻位置可以相等
输入:
xxx
输出:
[]
说明:
出现非法参数情况,返回空数组
(寄了,瞎写40%,猜应该是用某种贪心策略)

3.题目描述
积木宽高相等,长度不等,每层只能放一个或拼接多个积木,每层长度相等,求最大层数,最少2层。
输入
给定积木的长度,以空格分隔,例如:3 6 6 3。
输出
如果可以搭建,返回最大层数,如果不可以返回-1。

样例输入
3 6 6 3
样例输出
3
样例输入
3 5
样例输出
-1

(我运气好看到过这题好几次,原博文里有答案,他用的贪心策略过了,事实上应该是用例比较弱,正解得用DFS+剪枝,我当时第二题没做出来,有点烦,就用贪心策略过了,回去调第二题,正解可参考leetcode 698. 划分为k个相等的子集,比较好转化,稍作修改即可).

一二面八股文汇总
1.C和C++区别.
2.谈谈对malloc/free,new/delete的认识.
3.vector和list区别.
4.static的使用情景与作用.
5.对象的构造与析构顺序(我答的基类和派生类的构造析构顺序,他没反馈继续问,应该没跑题吧).
6.set和map,unordered_set和unordered_map的实现方式与区别(带unordered散列表,不带的是红黑树,set的key:value相同,map不同),如何评价hash函数的好坏(计算速度/key值碰撞频率?).
7.虚函数与实现方式,菱形继承的问题(数据重复)与解决方式(虚继承),虚继承如何解决问题的(讲了虚继承的内存模型,但我当时记不清楚了,我答的用指针指向具体的数据地址,应该是指针->一个虚表(叫啥名忘了),表里记录偏移量).
8.构造函数是否可重载(当然可以).
9.虚函数如何实现(指针和虚函数表),析构函数是否可重载(面完了一想无参数从语法层面就不可以,但是我脑抽了,答的不可以,但理由给错了).
10.谈谈inline---->再谈谈虚函数是否可inline(我答的不可以,因为inline编译时确定了,而虚函数是运行时动态绑定的,要实现多态,所以不可以,面试官说如果虚函数没有表现出多态是可以inline的,但一般不这么写).
11.模板编程了解么,谈谈你的认识.
12.谈谈智能指针原理(就unique/shared/weak那一套).
13.操作系统一般都是段页式内存,谈谈段页式内存的好处(我答的方便代码加载,方便空分复用,答的模糊且不全,具体可以参考操作系统,我去年看的,全忘了)
14.乐观锁和悲观锁了解么(......不了解).
15.linux了解么,用的多不(不多,只会基本的命令...).

#华为OD招聘##华为#
全部评论
第一题:第一个数往后迭代即可,记录一下每次剩余的量留给下次,最后做一次剩余的处理) 第二题:http://www.amoscloud.com/?p=2395  可以看看这个链接 第三题:最长非严格递减子序列吧,比较像
2 回复 分享
发布于 2022-04-30 23:20
那你这也得有三百多分啊,不低
1 回复 分享
发布于 2022-04-29 18:58
个人亲身经历,建议没入坑的还是早点远离华为OD,它的优势也就是加班多点、工作强度大点、任务重点,薪资低点,也没啥其他缺点了。。。🤣
1 回复 分享
发布于 2022-06-16 16:57
感谢楼主分享,顶顶楼主😁😁 另礼貌借楼: 【Java,C++,Web, Python,Go, 软测】  岗位的盆友们请戳👐👐👐(社招岗位): (快速安排机考(提供复习资料)!!-直达 华为面试!!!全程流程随时跟进可查): 【地点:东莞松山湖,西安,深圳,上海,武汉,成都,南京】 ☀️岗位: 华为OD( 华为预备役),各产品线各类语言开发岗位开放,只要你懂一门语言,就有合适的岗位!     虽然属于OD, 签约德科外企,但与 华为员工同工同酬(激励到位),工作稳定,工作内容相同(pl无差异分配任务) ⭐️管理:面试、绩效评定、均由 华为管理层进行,满一年即有名额转正 华为,转 华为的要求透明,量化,达到要求即可 ⭐️工作:接触并开发核心业务代码,技术栈全面,技术牛人多,技术氛围好,和互联网技术栈看齐 ☀️薪资丰厚:定级D1-D5,基本薪资+绩效+项目奖金+年终奖(年20w-40w) ☀️福利:和正式员工福利基本看齐,共享工位,免费夜宵,城际班车,欧洲园林式办公环境 ⭐️学历:全日制本科以上,学信网截图可证明(22届的 6月份后才可进流程,但也可私聊储备) ⭐️21届考公、考研等未就业者也可参与面试
点赞 回复 分享
发布于 2022-05-06 11:35
第二题我用python写了个,贪心 再处理下输入输出就可以用了哈 a = [3,5,1,2,3] for index in range(len(a)-1):     if (index % 2 == 0) and (a[index] < a[index+1]):         a[index], a[index+1] = a[index+1], a[index]     if (index % 2 == 1) and (a[index] > a[index+1]):         a[index], a[index+1] = a[index+1], a[index] print(a)
点赞 回复 分享
发布于 2022-05-12 16:29

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
评论
17
126
分享
牛客网
牛客企业服务