作为一个新手小白,我将开始一场用python征服力扣题库的旅程。
下面是力扣题库的第一题
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
方法一:暴力法。 暴力法很简单,遍历每个元素 x,并查找是否存在一个值与 target - x 相等的目标元素。 复杂度分析: 时间复杂度:O(n^2) 对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n) 的时间。因此时间复杂度为 O(n^2)。空间复杂度:O(1)。
#暴力遍历法
def twoSum(nums, target):
result = []
for i, value in enumerate(nums):
diff = target - value # 得到差值(即:在余下的元素中找到该diff值即可)
j = i + 1 # 因为不能重复利用同个元素, 所以把'位置索引j'加上1
if diff in nums[i+1:]:
j = nums.index(diff,i+1)
result.append([i,j])
return result
方法二:哈希表。Python可以用字典模拟哈希表,通过迭代将元素添加到哈希表中,同时我们比较该元素的对应元素是否已经存在与哈希表中,如果存在,我们直接返回答案。 时间复杂度:O(N)。空间复杂度:O(N)。
#字典模拟哈希表
def twoSum(nums, target):
hashmap = {}
result = []
for i, value in enumerate(nums):
j = target - value
if j in hashmap:
result.append([hashmap.get(j), i])
hashmap[value] = i
return result
主函数
from way1_2 import twoSum
nums = [3,2, 7, 6, 15,8,4,1]
target = 9
result = twoSum(nums, target)
print(result)
运行结果:
来源:CSDN
作者:我是无殇呀
链接:https://blog.csdn.net/qq_43348683/article/details/104340752