LeetCode两数之和
题目:找出列表中两元素相加结果为目标结果的两元素的索引
解法:3种
推荐:方法3
语言:python
题目介绍如下:
题目通俗说明:
给定一个整数列表和一个目标值,将列表中两元素之和等于目标值的元素的索引找到后,用列表返回
解法如下:
# author:铁臂阿童木
# datetime:2022/1/31 10:31
# software: PyCharm
# 题目:两数之和
# 解法:3种
# 推荐:方法3
# 先定义两对条件列表
nums1 = [2,7,11,15]
target1 = 9
# 返回类型为列表
nums2 = [3,2,4]
target2 = 6
# 序号:方法一
# 方法:双指针法
# 思想:固定一个位置的指针,让另一个指针从它后一位开始循环,对指向的两个值进行相加判断符合就返回列表形式的下标,
# 否则就判断j指针是否处于最后一位,如果是就让固定指针前进1位,不是就对j指针继续加一位循环
# 优点:方法简单
# 缺点:耗时
def twoSum(nums,target):
i = 0
j = 1
while j < len(nums):
if nums[j] == target - nums[i]:
return [i,j]
else:
if j == len(nums)-1: # 判断j指针是否处于最后一位
i += 1
j = i+1
continue
j += 1
# print(twoSum(nums2,6))
# 序号:方法二
# 方法:循环判断法
# 思想:对i进行循环,每次对target-nums[i]的值是否在此元素之后的列表中进行判断,如果存在就找到它的索引,直接输出这两个元素的索引,如果不存在继续对i循环
# 优点:代码简洁
# 缺点:耗时
def twoSum2(nums,target):
i = 0
while i < len(nums)-1: # 让其循环到列表的倒数第二位即可
if target - nums[i] in nums[i+1:]: # 判断要找的值是否在此元素之后的列表中
j = nums.index(target - nums[i],i+1,len(nums)) # 找到要找的值的索引
return [i,j]
i += 1
# print(twoSum2(nums2,6))
# 序号:方法三
# 方法:hash表查找法
# 思想:每次枚举循环列表的索引和元素,并且在hash表中查找是否有target-当前元素值的结果,如果有就返回当前值和找到值的索引,如果没有就将此次值添加的hash表中
# 优点:速度快
# 缺点:
def twoSum3(nums,target):
hashTable = dict()
for i,num in enumerate(nums): # 利用枚举遍历每个元素的索引和元素
if target - num in hashTable:
return [hashTable[target-num],i]
hashTable[nums[i]] = i
print(twoSum3(nums2,6))
经验:
如果自己编写中出现错误,就针对简单示例数据进行测试,使用编译器的调试工具打断点测试!
个人心得
1.尽量少用循环,速度太慢
2.多考虑哈希表(字典)
感谢阅读!!!
有错误请您指出!!!
欢迎补充!!!