三星研发面试经历
第 1 轮:在线编码轮 第一轮是在线编程轮,有 2 个问题。
- 给定一个元素数组,并以这样一种方式更改数组,使数组上的所有元素都是不同的。如果要替换一个值,则替换值应大于先前的值,修改后元素的总和应尽可能小。
示例 1:
Input: arr[1, 2, 3, 4, 5, 5, 5] and the result should be [1, 2, 3, 4, 5, 6, 7]
示例 2:
Input: arr[1, 2, 5, 7, 8, 8, 7] and the result should be [1, 2, 5, 7, 8, 9, 10] or [1, 2, 5, 7, 8, 10, 9]
- 第二个问题与 LCS 类似,稍作修改。即找到子序列中出现的所有字符都应该是元音的最长公共子序列。
例子:input: abcef, ffiocd then the answer should be 3 (abc, ioc)
三星研发招聘 3 小时编码回合中提出的问题
- 有一个问题陈述涉及回溯(递归)、图形(遍历、着色等)等概念。
现在需要注意的点是:
- 您必须在三星提供的编码编辑器中进行编码。
- 您必须从头开始实现所需的数据结构,如堆栈、队列等,并且不允许使用编程语言提供的默认数据结构(如 C++ 中的 STL 或Java中的 Collection)。
- 通常有 50 个或更多的测试用例(在我的例子中是 100 个),所有这些都必须通过才能被选中。
- 堆栈大小和堆大小是有限的。我不记得确切的限制,但它们要求您编写有效的解决方案。通常发生的情况是,在回溯过程中,递归调用的数量超出了界限,导致堆栈内存被填满并最终导致错误的答案。所以尽量消除回溯过程中的重复案例和使用的变量数量。设计您的解决方案时牢记这些事情。
- 不允许使用除 I/O 之外的其他库。
- 以我的经验,回溯问题以拼图的形式出现,图表上的问题不是很扭曲,你可以很容易地弄清楚要使用什么。
- 允许提交的数量上限为 10,但即使使用自己的测试用例,您也可以多次运行测试用例。