📜  亚马逊面试经历 |设置 272(校内)(1)

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

亚马逊面试经历 - 设置 272(校内)

简介

这是我在亚马逊面试时遇到的一道题目,题目编号是设置 272(校内)。在此记录一下我的面试经历和思路。

题目描述

给定一个由不同正整数构成的数组,判断其中是否存在两个互不相同的数,它们的和恰好等于数组中的某一个元素。

面试思路

在开始解题之前,需要注意以下几点:

  • 输入数组不为空。
  • 数组中的元素均为正整数,且互不相同。

接下来,我列举了两个解题思路。

思路一

遍历数组,每次遍历将当前元素和它之前的所有元素相加,如果有元素和相等,则说明存在两个数的和等于它们,返回 true;若遍历完数组后没有返回 true,则返回 fasle。

class Solution:
    def findSum(self, nums: List[int]) -> bool:
        for i in range(len(nums)):
            for j in range(i):
                if nums[i] + nums[j] == nums[i] or nums[i] + nums[j] == nums[j]:
                    continue
                if nums[i] + nums[j] in nums[:j]:
                    return True
        return False
思路二

遍历数组,每次遍历将当前元素加入到一个集合中,判断当前元素的两倍是否在集合中,如果在集合中,则说明存在两个数的和等于它们,返回 true;若遍历完数组后没有返回 true,则返回 fasle。

class Solution:
    def findSum(self, nums: List[int]) -> bool:
        seen = set()
        for num in nums:
            if num * 2 in seen:
                return True
            seen.add(num)
        return False
总结

本题目的主要考察点是哈希表。第一个解题思路通过枚举的方式,时间复杂度较高,但还是可以通过本题。第二个解题思路则是通过哈希表来解决,时间复杂度比前面的思路要低很多,非常适合在面试过程中使用。