华为 2021-10-12 早

华为机试三道题,分值分别是 100、100 和 200。题型没有固定的,而且并非是 Leetcode 原题,且采用 ACM 模式。因此,对我来说还是有一定挑战的。时间限制,大约 2 小时 15 分钟。第一题属于常规题,N 进制减法,其实是和二进制加法一个套路,但是我没有做出来。第二题是循环打印 N 个数组,算是做出来了。第三题是 n 个月饼分 m 个人,月饼由低到高排序,两者之间的差不能超过 3。我一开始用回溯把所有的情况枚举出来,然后通过排序判断情况是否合法,但这种做法耗时较多,通过率好像 10% 不到,而后我又想加记忆化搜索,但是时间不够。后来复盘这道题的时候发现我的思想太局限了,本质是一个组合的过程,即使用 DFS 对所有组合进行尝试,代码设计的比较巧妙,简单来说就是先固定第一个为 i 个月饼,然后剩下 m - 1n - i 个月饼。在分的时候注意不能超过 3 个,否则条件就不成立了。这一点是我没有想到的,其实就一定就是实现剪枝操作。我是这么觉得的。
后来对整个考试回味一下,3 道题中规中矩吧,事后发现也没有特别难的点,主要还是不能急,还有就是感觉自己算法基本功还并不扎实,所以多做多练才是硬道理呀。