题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
解题原理:先用target减去数组中一个数得到的值之后遍历数组去寻找与这个值相等的元素。
我自己写的暴力解法:
def twoSum(nums, target):
for j in range(0,len(nums)):
a = target - nums[j]
for k in range(0,len(nums)):
if k!= j:
if nums[k] == a:
print([j,k])
nums = [1,2,3,4,5]
target = 6
twoSum(nums,target)
输出为:
借鉴别人的字典写法:
def twoSum(nums, target):
hashmap={}
for ind,num in enumerate(nums):
hashmap[num] = ind #这里num是值,ind是索引
for i,num in enumerate(nums):
j = hashmap.get(target - num)
if i!=j:
print([i,j])
nums = [1,2,3,4,5]
target = 6
twoSum(nums,target)
输出一样,第二种写法时间复杂度小了很多。
补充:enumerate()函数相比range()优势是可以同时返回数组的下标和值。
优化两数之和问题:暴力解法与字典解法对比
本文探讨了一个经典的编程问题——两数之和,通过对比暴力遍历和利用字典优化的解决方案,展示了如何降低时间复杂度。字典解法利用了enumerate函数,实现了从O(n^2)到O(n)的时间复杂度转换,提高了算法效率。
597





