远足面试经验 |校外 2019 年 9 月
第 1 轮:在线编码轮
5 道编程题,时长:75 分钟
- 给定两个坐标 (a, b) 和 (c, d),检查 (a, b) 是否可以制成 (c, d)。在每一步 (a, b) 都可以转换为 (a+b, b) 或 (a, a+b)。由于每一步都有两个选择,因此递归是一种方法。只有“是”或“否”必须是输出。
- 给定一个 26 长度的数组,它指示一个字符是普通字符还是特殊字符(0/1),一个字符串和一个整数 k,找到输入字符串中最长的子字符串,使得它们中最多有 k 个特殊字符。寻找每个子字符串会超时,因此使用滑动窗口技术并保持遇到的特殊字符的计数,每当计数> k 时,从开头减少窗口。
- 给定一个字符串数组,我们可以通过删除一个字符从一个字符串移动到另一个字符串。找到通过执行此操作可以形成的最长链。由于链将由长度差为 1 的字符串组成,我们可以根据长度对字符串进行排序,然后创建链。
- 给定一个包含 0 和 1 的二维数组,找到全为 1 的最大正方形。 DP问题。
- 给定一个数组,找出将所有偶数元素移动到数组开头和奇数元素移动到数组末尾所需的最小交换次数。
第 2 轮:
- 堆栈中的 GetMin()函数。
- 给定两个排序的链表,合并它们。然后他将问题修改为给定k个排序的链表,合并它们。这可以通过使用 k 大小的最小堆来完成。
- 给定一个数组,您可以根据另一个数组的相对顺序对其进行排序。修改自定义排序。
- 火车站所需的最小平台。我告诉他 O(nlogn) 方法。他要求 O(n) 方法。我无法想到 O(n) 方法,所以他问了另一个有助于解决当前问题的问题。如何检查两个字符串是否是字谜?这个问题有助于找到 O(n) 解决方案。
- 给定一个数组,找到总和可被 8 整除的所有子集。我知道必须采用累积总和,但后来我想不出如何使用它。所以他告诉我,我可以形成一个可以被 8 整除的数字方程。如果说 sum(i, j) (i
- HashMap 是如何在Java中实现的?处理冲突以及随着越来越多的数据进入,如何处理哈希图大小。哈希图大小加倍,现有键被重新映射。
第三轮:
- 单例类及其实现。
- Reader Writer 问题与修改以在到达时优先考虑写入器,因为标准实现会使写入器挨饿。
第四轮:
- LRU 缓存实现。
- 然后他修改了这个问题。每个密钥都有一个 Time to expiry 字段。所以这些键必须从缓存中删除。我从 hashmap 开始,但他正在寻找不同的数据结构。
第五轮:
与副总裁轮流。问我行为问题。关于我的简历,我的兴趣。
判决:选择。