📜  亚马逊面试经历|第 149 组(校内实习)(1)

📅  最后修改于: 2023-12-03 15:36:06.340000             🧑  作者: Mango

亚马逊面试经历|第 149 组(校内实习)

简介

本次面试是针对校内实习的面试。主要考察了我的编程能力、算法能力和团队合作能力。

面试内容
第一轮面试

该轮面试主要是对我的编码能力进行考察。面试官为我提供了一个需求,需要我根据需求写出相应的代码实现。

需求

给定一个包含 n 个元素的整数数组 nums,判断是否存在三个元素 a,b,c,使得 a + b + c = 0?请你找出所有和为 0 且不重复的三元组。

实现方式

我利用了双指针的方式来实现。具体实现过程如下:

  1. 首先将原数组进行排序。
  2. 然后遍历数组。
  3. 在遍历过程中,固定当前元素,并进行双指针遍历。
  4. 双指针分别指向当前元素的后一位和数组末尾。
  5. 如果指针所指的三个元素之和等于 0,则将它们的值存入结果数组中,并将左指针右移,右指针左移,继续寻找下一组满足条件的三个元素。
  6. 如果指针所指的三个元素之和大于 0,则将右指针左移,使其指向的元素更小,继续寻找下一组满足条件的三个元素。
  7. 如果指针所指的三个元素之和小于 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)

实现方式

我利用递归的方式来实现。具体实现过程如下:

  1. 如果 n 等于 1,则返回 1,表示 1 的阶乘为 1。
  2. 如果 n 大于 1,则计算 n-1 的阶乘,并将结果与 n 相乘。
  3. 递归调用函数,计算 n-1 的阶乘。

代码实现

def factorial(n: int) -> int:
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)
第三轮面试

该轮面试主要考察我的团队合作能力。面试官为我提供了一个需求,需要我和另外两个面试者共同完成。

需求

给定一个包含 n 个元素的整数数组 nums 和一个目标值 target,请在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

实现方式

我们三个人先分别在自己的电脑上编写实现代码,然后在讨论的过程中进行改进和优化。

我使用了哈希表的方式来实现。具体实现过程如下:

  1. 创建一个空的哈希表。
  2. 遍历整个数组,对每个元素做以下操作:
    • 计算目标值与当前元素之差,在哈希表中查找是否存在。
    • 如果哈希表中已有该值,返回它们的数组下标。
    • 如果哈希表中没有该值,则将当前元素插入哈希表中。

代码实现

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
总结

通过这次面试,我不仅提高了对编程的认识,还对算法和团队合作有了更深刻的理解。也更加清楚自己在哪些方面需要提高。总之,这是一次十分有收获的经历。