📅  最后修改于: 2023-12-03 15:21:42.162000             🧑  作者: Mango
我本人是一名计算机科学专业的学生,对计算机编程有浓厚兴趣,并希望能进入互联网公司实习。在经过自己的努力和准备之后,我顺利进入了亚马逊公司参加了为期6个月的SDE实习。
亚马逊公司的初试主要是在线测试,分为两部分:调查问卷和在线编程题目。
调查问卷主要是了解应聘者的背景、技术能力、个人经验以及职业愿望等内容,这一部分比较简单,使用英语填写即可。
在线编程题目是为了测试应聘者编程能力和解决问题的能力。这一部分主要包括两个问题,第一个是字符串压缩,第二个是LCS问题。
给定一个字符串,编写一个算法将其压缩成重复字符的数字表示。例如,字符串 "AAABBCDD" 应该变为 "A3B2C1D2"。
def compress_string(s: str) -> str:
if not s:
return ""
n = len(s)
res = []
i = 0
while i < n:
j = i
while j < n and s[j] == s[i]:
j += 1
res.append(s[i])
res.append(str(j - i))
i = j
return "".join(res) if len(res) < n else s
给定两个字符串 s 和 t,编写一个算法来求它们的最长公共子序列(LCS)。例如,对于s = "abcdefg"和t = "abcdfg",它们的LCS为 "abcg"。
def longest_common_subsequence(s: str, t: str) -> str:
m, n = len(s), len(t)
dp = [["" for _ in range(n + 1)] for _ in range(m + 1)]
for i in range(1, m + 1):
for j in range(1, n + 1):
if s[i - 1] == t[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + s[i - 1]
else:
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1], key=len)
return dp[m][n]
复试主要是在线麦克风面试和在线代码面试。
麦克风面试主要是测试应聘者的英语沟通和解决问题的能力,面试官会根据简历和初试表现提问应聘者的个人能力和经历。
代码面试主要是测试应聘者的编程能力和解决问题的能力,面试官会提供几道编程题目,并要求应聘者在线完成编程,同时可以向面试官提问。
给定一个二叉树,编写一个递归算法来返回其前序遍历。例如,给定二叉树 [1, null, 2, 3],返回 [1, 2, 3]。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def preorder_traversal(root: TreeNode) -> List[int]:
res = []
def helper(root):
if not root:
return
res.append(root.val)
helper(root.left)
helper(root.right)
helper(root)
return res
给定一个字符串s,找到其中最长的回文子序列。例如,对于字符串s = "bbbab",其最长回文子序列为 "bbbb"。
def longest_palindromic_subsequence(s: str) -> str:
if not s:
return ""
n = len(s)
dp = [["" for _ in range(n)] for _ in range(n)]
for i in range(n):
dp[i][i] = s[i]
for i in range(n - 1, -1, -1):
for j in range(i + 1, n):
if s[i] == s[j]:
dp[i][j] = s[i] + dp[i + 1][j - 1] + s[j]
else:
dp[i][j] = max(dp[i + 1][j], dp[i][j - 1], key=len)
return dp[0][n - 1]
亚马逊的SDE实习面试难度比较大,需要应聘者有扎实的编程能力和解决问题的能力。在准备过程中,需多刷题,熟悉并熟练掌握各种编程语言和数据结构算法。另外,要注意英语沟通和表达能力,面试时发挥自己的优势和亮点,展示个人实力和能力。