试了一下华为 od 机试题

2023-01-05 09:03:12 +08:00
 YadongZhang

杭州前端岗

总共 3 道题,限时 150 分钟

1

题目描述

给出一个整数数组,找出出现频率最多的数字,输出该数字在数组中最后一个下标与第一个下标之差,如果有多个频率最高数字,输出最小下标之差。

测试用例:

[1, 2, 2, 3, 3, 4, 3, 1, 1],频率最高的有数字 1 和 3 ,但是 3 构成的数组 [3, 3, 4, 3] 长度 ( 4 )最小,所以输出 4 。

解法:

HashMap ,根据 value 排个序,找出频率最高 key, lastIndexOf - indexOf, 然后 Math.max(ans, tempMax)

总结:

这道题耗时最长,以前从未做过 HashMap 排序,最后转成数组排序的

测试通过率✅: 80%(应该是有 edge cases 没考虑到)

2

题目描述

双人自行车限重 m ,给出一组公司员工体重,每个人的体重都小于限重,求最少需要多少辆双人自行车。

解法:

排序 + 双指针

总结:

有思路了就直接 AC 了

测试通过率✅: 100%

3

题目描述

连续子列问题,一个整数数组,数据规模较大,输出和( sum )相等的连续子列构成数组的最大长度。

测试用例:

解法:

每一个元素看做一个子序列,遍历一遍

总结:

原题中文描述的,太抽象了,也没掌握过什么高级数据结构和算法,暴力解了

测试通过率✅: 56.36%(数据规模较大,算法复杂度太高,应该是超时了)


当天下午在牛客上刷了 5 道题,熟悉了一下输入输出,晚上题目发过来就做了

机考是用牛客的 ACM 模式,每道题只能提交一次,90 分钟交卷,最后得分 260

运气还算比较,基础数据结构里没有二叉树相关题目

小技巧:草稿纸上演算一次效率超高

以前面试都是盯着屏幕傻看。。。


因为简历上有超过半年空窗期,后面流程也就没往下走了,另外,因为身体原因,不大能适应加班。

有需要的就当经验帖了

8540 次点击
所在节点    职场话题
35 条回复
zanx817
2023-01-05 22:56:41 +08:00
笔试 2.5 小时,比考博时间还要长了
yifangtongxing28
2023-01-05 23:45:11 +08:00
大家的重点为什么都在题目上,不应该是 od 对空窗半年的人直接拒绝吗?
netabare
2023-01-06 04:30:39 +08:00
手写还是 OJ 还是指定机器?
光看描述感觉没什么难的……?看起来都是很基础的算法题。一道题 50 分钟,很宽裕了。当然也要看数据集怎么样,如果是类似 ACM 那种数据集的话估计还是有点压力。
JasonLaw
2023-01-06 08:26:58 +08:00
```python
from math import inf

arr = [2, 5, 9, 4, 3, 3, 6, 1, 7, 4, 1, 2]
d = {}
for i, n in enumerate(arr):
if n not in d:
d[n] = [0, i, i]
d[n][0] += 1
d[n][2] = i

max_freq, index_diff = -inf, inf
for n, v in d.items():
if v[0] > max_freq:
max_freq = v[0]
index_diff = v[2] - v[1]
elif v[0] == max_freq:
index_diff = min(v[2] - v[1], index_diff)
print(index_diff)
```
JasonLaw
2023-01-06 08:30:01 +08:00
第一题

JasonLaw
2023-01-06 08:40:08 +08:00
第二题

JasonLaw
2023-01-06 08:46:13 +08:00
不是很理解第三题。

“连续子列问题,一个整数数组,数据规模较大,输出和( sum )相等的连续子列构成数组的最大长度。”

sum 指的是什么,一个参数吗?是要我们找出总和等于 sum 的最长的连续子数组的长度吗?
YadongZhang
2023-01-06 10:47:24 +08:00
@zanx817

没有 k ,第二个参数是数组长度

用了 hashmap ,我上面描述应该写了

@netabare
OJ ,ACM 模式,没有报错提示,而且只能提交一次
我记得只有最后一题数据量比较大


@JasonLaw

sum 任意,不是参数,看我上面那个例子
JasonLaw
2023-01-06 11:25:12 +08:00
@YadongZhang #28 完全不理解那个例子,可以的话,解释一下?
YadongZhang
2023-01-06 13:30:41 +08:00
@JasonLaw

以第一个数组来例

8 8 9 1 9 6 3 9 1 0

连续子列的和可以是任意单独元素

假设是 8 ,那么构成最终数组的连续子列分别为
[
[8],
[8],
]
该数组长度为 2

第二个元素结果相同,直接跳过

遍历到第 3 个元素 9

[
[9],
[9],
[6, 3],
[9]
]
该数组长度为 4 ,更新结果 Math.max(2, 4) = 4

继续遍历,和为后面元素的连续子列构成的数组长度均为 1

所以最终输出 4

原题描述是挺抽象的,我是看题目标题和测试用例推出来的,不知道我理解对不对
asensio
2023-01-06 15:52:19 +08:00
op 是目标院校么,非目标院校的要 300 多分额
asensio
2023-01-06 16:12:17 +08:00
求分享下做 Freelance Web3 的经历,😄
hardto
2023-01-08 21:34:34 +08:00
同求分享一下 freelance 的经历吧
ccc825
2023-01-09 00:19:38 +08:00
22 年上半年做的笔试题,如果不涉及比较难的动态规划、滑动窗口这类题,用 php 感觉很简单,做了 320 分。
然后现在入职了尝试考了一次专业级 c 的算法题,0 分……
c 真的太难了,排序和哈希都得自己去实现。还好 od 要求转正前过工作级就可以,努力学下 c 和算法应该没什么大问题。主要是不知道能不能干到转正,入职两个月已经想跑路了,做的东西有一点兴趣但是太难学,而且以后跳槽方向很小
UN2758
2023-01-11 09:12:34 +08:00
之前做过 od 的机试,只记得有道二维矩阵搜索,那时候题目比较简单,只有一道题目用例不是百分百,现在应该变难了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/906656

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX