在最近的一次采访中,我问了以下问题:从一个排序的数组中找到两个数字的索引,这些索引的总和等于目标总和,而不会两次使用相同的数字,除非它在数组中出现两次(可以在Leetcode也是如此)。这里有一些我需要时间复杂度分析的解决方案。另外,如果还有其他方法可以更快地解决此问题,请赐教。
解决方案1-
def findTwoSum(nums,target):
low = 0
high = len(nums) - 1
while low < high:
currSum = nums[low] + nums[high]
if currSum == target:
return low, high
elif currSum > target:
high -= 1
else:
low += 1
return -1,-1
解决方案2-
def findTwoSum(nums,target):
hashmap = dict()
for i in range(len(nums)):
if nums[i] not in hashmap:
hashmap[nums[i]] = [i]
else:
hashmap[nums[i]].append(i)
for key in hashmap:
if target - key in hashmap:
if target - key != key:
return [hashmap[key][0], hashmap[target-key][0]]
elif len(hashmap[key]) > 1:
return [hashmap[key][0], hashmap[key][1]]
现在考虑一个输入数组来解决同样的问题,因为它很长,以至于需要将数据存储在分布式系统中。解决方案的外观将如何调整以执行所有消息传递,或使其在分布式环境中工作所需的一切。感谢您是否可以根据自己的假设提供解决方案。谢谢!