📅  最后修改于: 2023-12-03 15:36:06.340000             🧑  作者: Mango
本次面试是针对校内实习的面试。主要考察了我的编程能力、算法能力和团队合作能力。
该轮面试主要是对我的编码能力进行考察。面试官为我提供了一个需求,需要我根据需求写出相应的代码实现。
给定一个包含 n 个元素的整数数组 nums,判断是否存在三个元素 a,b,c,使得 a + b + c = 0?请你找出所有和为 0 且不重复的三元组。
我利用了双指针的方式来实现。具体实现过程如下:
def threeSum(nums: List[int]) -> List[List[int]]:
n = len(nums)
nums.sort()
res = []
for i in range(n):
if i > 0 and nums[i] == nums[i-1]:
continue
l, r = i+1, n-1
while l < r:
if nums[i] + nums[l] + nums[r] == 0:
res.append([nums[i], nums[l], nums[r]])
l += 1
r -= 1
while l < r and nums[l] == nums[l-1]:
l += 1
while l < r and nums[r] == nums[r+1]:
r -= 1
elif nums[i] + nums[l] + nums[r] < 0:
l += 1
else:
r -= 1
return res
该轮面试主要考察我的算法能力。面试官给我提供了一个例子,让我基于该例子写出一个算法,用于求解 n 的阶乘。
输入:5
输出:120 (5 的阶乘是 5x4x3x2x1 = 120)
我利用递归的方式来实现。具体实现过程如下:
def factorial(n: int) -> int:
if n == 1:
return 1
else:
return n * factorial(n-1)
该轮面试主要考察我的团队合作能力。面试官为我提供了一个需求,需要我和另外两个面试者共同完成。
给定一个包含 n 个元素的整数数组 nums 和一个目标值 target,请在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
我们三个人先分别在自己的电脑上编写实现代码,然后在讨论的过程中进行改进和优化。
我使用了哈希表的方式来实现。具体实现过程如下:
def twoSum(nums: List[int], target: int) -> List[int]:
hash_map = {}
for i, num in enumerate(nums):
if target - num in hash_map:
return [hash_map[target - num], i]
hash_map[num] = i
通过这次面试,我不仅提高了对编程的认识,还对算法和团队合作有了更深刻的理解。也更加清楚自己在哪些方面需要提高。总之,这是一次十分有收获的经历。