import random
# O(n^2) time | O(1) space
def twoNumberSum( array, targetSum):
for i in range (len(array) - 1):
firstNum = array[i]
for j in range( i+1, len(array)):
secondNum = array[j]
if firstNum + secondNum == targetSum:
return [firstNum, secondNum]
return[]
# O(n) time | O(n) space
# 只找到第一个两两之和满足条件
def twoNumberSumImp(array, targetSum):
nums = {}
for num in array:
potentialMatch = targetSum - num
if potentialMatch in nums:
return [potentialMatch, num]
else:
nums[num] = True
return []
# 如果有多个两两之和满足条件则都找到
def twoNumberSumImproved(array, targetSum):
nums = {}
hasElement = []
for num in array:
potentialMatch = targetSum - num
if potentialMatch in nums:
hasElement.append([potentialMatch, num])
# return hasElement
else:
nums[num] = True
return hasElement
# O(nlog(n)) | O(1) space
def twoNumSum( array, targetSum):
array.sort()
left = 0
right = len(array) - 1
while left < right:
currentSum = array[left] + array[right]
if currentSum == targetSum:
return [array[left], array[right]]
elif currentSum < targetSum:
left += 1
elif currentSum > targetSum:
right -= 1
return[]
if __name__ == "__main__":
nums = []
targetSum = 14
for i in range(10):
nums.append(random.randint(0, 10))
print( nums)
print( twoNumberSum(nums, targetSum))
print(twoNumberSumImproved(nums, targetSum))
print(twoNumSum(nums, targetSum))
第三种方法是先从小到大排序,然后把第一个和最后一相加,其和如果比目标值小,则左边的元素向前移一位,如果其值比目标值大,则右边的元素向左移一位,进行比较。

本文介绍了多种解决两数之和问题的算法实现方法,包括暴力搜索、使用哈希表和双指针技术等,详细分析了每种方法的时间复杂度和空间复杂度。

1万+

被折叠的 条评论
为什么被折叠?



