📜  SDE-1 的优步面试体验 |校外 2021

📅  最后修改于: 2021-11-18 01:53:52             🧑  作者: Mango

优步在 6 月的第一周开始了校外开车。我通过大学毕业获得了推荐。一周后,我获得了在线编码轮次的测试链接。

在线编程回合(60 分钟):有四道编程题(部分学生回答了三道题)。测试是在 CodeSignal 平台上进行的。

  1. 给定一个包含 N 个元素的数组 A,您可以任意次数(可能为 0)执行以下操作——您可以用整数替换数组中的任何整数。您的任务是打印使元素连续所需的最少操作。

    约束条件:1 <= N <= 1e6, 1 <= A[i] <= 1e9

Example:
Input: 4 7 11 6 9
Output: 2
Explaination: 
We can replace 11 with 5 and 9 with 8, 
resulting in the array [4, 7, 8, 6, 5]
which contains all the elements from 4 to 8.
  1. 给定 N 根绳索和一个表示绳索长度的数组 A。你可以把绳子分成几根绳子。输出您可以使用给定绳索中至少 K 的计数实现的最大绳索长度。
Example:
Input:
4 2//N K
1 3 4 9 // Array A
Output: 4
Explanation: 
We can cut the rope with length 9 as (4,4,1). 
So, total count of ropes with 
length 4 equals to 3 >= K i.e. 2
This the maximum length you can
achieve with the count of at least 2
  1. 给定尺寸为 N x M 的地板,您有一个清洁机器人,可以清洁它访问过的瓷砖。最初,所有瓷砖都是脏的,机器人在 (0,0) 处。机器人有一个 K 号电池,它可以在四个方向上移动。机器人每移动一次,它的电池就会减少 1。地板在给定矩阵中由 1 表示的一些瓷砖上包含障碍物,机器人无法在这些瓷砖上移动。输出机器人可以清洁的最大瓷砖数量,以便它必须在电池耗尽之前返回其初始位置。

    约束条件:1 <= N x M <= 100, 1 <= K <= 12, 0 <= Floor[i][j] <= 1

Example:
Input:
4 4 6 // N M K
0 0 0 0
0 1 0 1
0 0 0 0
Output: 4
Explaination: 
The robot can choose this path 
(0,0)-> (1,0) -> (2,0) -> (2,1) and 
return to the initial position using the same path. 
Robot cannot choose the other path because it will run out 
of battery before reaching the initial position. 
So, total number of distinct tiles visited and cleaned = 4.
  1. 给定一个由 N 个元素组成的数组 A,您需要执行以下操作: – 从数组中移除 p 个元素 – 移除 q 组大小为 2 的连续元素 – 移除 r 组大小为 3 的连续元素形成的左右数组合并。执行操作后输出最大可能的总和。

    约束:1 <= N <= 1e5, 1 <= p+2*q+3*r <= N

Example:
Input:
7 1 1 1 //N p q r
4 5 2 1 3 6 7
Output: 7
Explaination: 
For p=1, you can remove 1 from the 
array -> [4,5,2,3,6,7]

For q=1, you can remove 2 and 3 
which is group of consecutive elements 
of size 2 -> [4,5,6,7]

For r=1, you can remove 4,5 and 6 
which is group of consecutive 
elements of size 3 -> [7]
The maximum possible sum of 
array equals to 7.
(Note: There are other ways to remove elements
which will give the same result)

我能够完全解决前三个问题,部分解决最后一个问题(7/8 个测试用例)。几天后我收到了一封关于面试时间表和轮数的邮件。在 3,00,000 名申请人中,只有 95 人被选中。

这是一个为期一天的招聘过程,包括两轮技术轮和一轮人力资源轮。每一轮都是淘汰赛。

技术回合 1(45 分钟):面试官在整个面试过程中非常友好和乐于助人。他介绍了自己,并要求我也这样做。然后他迅速转向编码问题。采访是在 CodeSignal 平台上进行的。

  1. 给定一个编码字符串,您必须输出解码后的字符串。编码后的字符串将采用以下格式:1[ac2[de]]、2[a2[b3]]、3[a3[b23c1[d]k2[x]]]。基本上,字符串由字母、数字和方括号组成。在每个方括号之前,都会有一串数字。数字序列表示它们必须在结果字符串重复多少次。请参阅示例以更好地理解。
Example:

Input: 1[ac2[de]]
Output: acdede
Explanation: 2[de] means "de" should be
repeated two times and 1[ac....] means 
whatever was the resultant string between
 the square brackets should be repeated only once.

Input: 2[a4[b]c13d2[e]]
Output: abbbbc13deeabbbbc13dee
Explanation: As you can see, the decoded
string may also contain digits because those digits
are not followed by a square bracket in the encoded string.

Input: 1[a2[b1[c11[d]]]]
Output: abcdddddddddddbcddddddddddd
Explaination: This example shows that there
can be multiple digits before a square bracket(11 in
this case)

我能够通过一些调试使用递归来解决这个问题。然后面试官让我运行我的代码并针对一些测试用例进行测试。 (此问题的最佳解决方案是使用堆栈)

一个小时后,我接到了下一轮面试的电话。

Technical Round 2(45 分钟):本轮面试有两名面试官,以班级设计为主。采访再次在 CodeSignal 平台上进行。介绍完后,他们开始提问。

  1. 设计一个支持以下功能的排行榜: 1. addUser() – 添加具有属性名称、电子邮件和分数的新用户的能力。初始分数应为零。 2. updateScore() – 使用给定值更新用户分数的能力。 3. getRank() – 获得给定用户排名的能力。如果两个用户的分数相同,那么之前添加的用户将有更好的排名(即更低的值)。 4. getFirstK() – 能够获取排名小于等于 K 的用户列表。

    我创建了两个类,并为所有函数提供了蛮力方法。然后,面试官告诉我每个功能的预期时间复杂度。经过一段时间和提示,我告诉他们一种使用 BST 并修改我创建的类的方法。我们详细讨论了该方法以及每个函数的时间复杂度。此后,我们时间紧,所以面试官让我承担某些功能并完成我的代码。

15 分钟后,我接到了 HR 回合的电话。

HR 回合(1 小时):这是一个非常长的 HR 回合。以下是一些问题:

  1. 自我介绍
  2. 解释你的最后一年的项目(FYP)
  3. 你从这个项目中学到了什么?
  4. 您将如何向外行解释您的项目?
  5. 你的项目有哪些用例?
  6. 几个项目相关的问题
  7. 项目过程中遇到了哪些问题,你们是如何解决的?
  8. 说说你的实习经历。
  9. 你不喜欢实习的哪些方面?
  10. 你从实习中学到了什么?
  11. 向我详细解释你的实习项目。
  12. 您在项目中使用了哪些技术?
  13. 一些实习项目相关的问题。
  14. 你还记得你的在线回合的问题吗?给我解释第一个问题?
  15. 你对一家公司有什么期望?
  16. 你的目标是什么?
  17. 第三个问题是什么,你是如何解决的?

在此之后,他问了我一个编码问题。

  1. 给定一个包含数字的字符串S。找出可以从给定字符串形成的有效 IP 地址的数量。
    约束条件:1 <= 长度(S) <= 12
Example:
Input: 11111111111
Output: 4
Explaination:
These are the valid IP addresses 
111.111.111.11
111.111.11.111
11.111.111.111
111.11.111.111
  1. 我首先解释了我的解决方案,然后实施了它。他给了我几个测试用例,我得到了正确的答案。

之后,面试官问我有没有什么问题要问他。我问优步是如何受到大流行的影响的。在他的回答之后,采访结束了。

我被选中了两天后接到电话。

结论:选中!

祝大家一切顺利!