📅  最后修改于: 2023-12-03 15:36:06.005000             🧑  作者: Mango
这是我在亚马逊面试时遇到的一道题目,题目编号是设置 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
本题目的主要考察点是哈希表。第一个解题思路通过枚举的方式,时间复杂度较高,但还是可以通过本题。第二个解题思路则是通过哈希表来解决,时间复杂度比前面的思路要低很多,非常适合在面试过程中使用。