直飞面试经历 | Set 25(平台工程师校外)
申请方法:我通过员工推荐申请了Directi。
第 1 轮:在线编码轮(Codechef,90 分钟)
问题 1 :简单,即席
Statement
You are given a string of numeric digits, you have to find smallest number possible using these digits with no leading zeroes.
Example
If input is 330101 then answer is 100133
Constraint
Length of string <= 10^5
问题2:
Statement
You are given two strings, say A and B, of the same length N. You can swap A[i] and B[i] for all i between 1 and N, inclusive. You cannot swap two characters within A, or within B. Also, you can only swap a character in A with the character at the same index in B, and with no other character. You can perform this operation zero or more times.
You wish to modify the strings through the operations in such a way that the number of unique characters in the strings is small. In fact if n(A) is the number of unique characters in A and n(B) is the number of unique characters in B; you wish to perform the operations such that max(n(A),n(B)) is as small as possible.
Print the value of max(n(A),n(B)) after all the operations.
Example
If input is
ababa babab
Then output should be one because we can swap and make the pair of strings
(aaaaa , bbbbb)
Constraints
问题 3:
修改后的背包 DP 问题
第 2 轮:算法轮(Skype,45 - 50 分钟)
给你一个方格(NxN);网格上的每个位置要么是砖块 (B),要么是空的 (_)。
砖的总数正好等于在网格中建造一堵“墙”所需的数量。请参阅示例以获得更清晰的理解。
也就是说,最后,所有砖块(B)都应该放置在边界位置。
用于将砖块从位置
网格中的每块砖都可以以相同的概率移动到边界上的任何位置。这样做所需燃料的预期价值是多少?每块砖最多只能移动一次。
例子
最后(移动所有砖块后),网格应该如下所示:
1 <= T <= 100
1 <= length(A) <= 16
length(B) = length(A)
暗示
你得到了所有砖块的初始位置,并且你知道最终位置。
由于所有积木都相同,因此您可以将任意积木放在任意边界位置。
假设有'b'个边界位置= b块
因此,您需要将旧位置映射到新位置。
在蛮力方法中,尝试所有位置将是 O(b!)。
但是,您可以更好地了解概率如何逐块累加而不是按排列方式累加。
预期:O(n)
第 3 轮:算法轮(Skype,45 - 50 分钟)
第 4 轮:技术知识轮(Skype,45 分钟)
- 深入谈论你的一个项目。准备好回答有关它的任何问题。你也可以谈谈你的实习项目。我谈到了我的 GSoC 项目。
- 准备好回答简历上的任何内容。我被要求谈谈我简历上列出的另一个项目。
- 你将如何实现 git 的差异功能?准备好现场跟进问题和进一步优化。
- 我得到了一个示例代码,其中包含一个 add_balance() 和一个减法平衡()函数,如果两个线程访问它,我被要求解释问题。你会如何纠正它?(使用互斥锁)
- 后续问题:(您认为)互斥锁操作如何在操作系统中实现等待和信号?
- 数据库索引
- 什么是索引?它们有什么用处?
- 如果你必须建立一个索引,你会使用什么数据结构?
- 为什么是 Btree 而不是普通的 BST(当 Btree 的比较次数实际上更大时)?