Leetcode_01【两数之和】
文章目录:
- 题目
- 脚本一及注释
- 脚本逻辑
- 脚本二及注释
- 脚本逻辑
题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
脚本一及步骤注释
class Solution: #定义一个名为Solution的类 def twoSum(self, nums: List[int], target: int) -> List[int]: #此处是leetcode给定的输出格式 zidian = {} #定义一个空字典 for i,j in enumerate(nums): #使用枚举的方法enumerate对列表nums的元素进行遍历,i为列表元素的索引号,j为索引号为i对应的列表元素 k = target - j #使用和值减去其中一个加数得到另一个加数 if k in zidian: #对字典的键进行遍历,查看是否有键的值为k return(i,zidian.get(k)) #如果有键的值为k,则返回遍历列表当前元素的索引号及字典中键为k所对应的值 zidian[j] = i #如果没有在字典中找到键的值为k的情况,则把遍历列表的当前元素的元素值作为键,索引号为值 加入到字典中 result = Solution() #创建一个Solution的类 print(result.twoSum) #调用类中的方法,由于此方法会返回值,所以将值打印出来即可
【处理逻辑】
- 此脚本处理逻辑是生成一个新的数据记录处即字典,用于存储已经遍历的列表元素的索引号及元素值
- 由于列表遍历过程中是与字典进行遍历的,所以字典的键值是不会重复的
- 通俗来讲就是:一开始桶子是空的,不断拿数据与桶子里的数据进行比对,如果没有找到比对目标的值会放到桶子里,然后进行下一次的比对
脚本二及步骤注释
class Solution: #同上 def twoSum(self, nums: List[int], target: int) -> List[int]: #同上 for i in range(0,len(nums)): #从0到列表元素个数组成的数列进行遍历 aa = nums[i] #获取一个列表元素 bb = target - aa #求和值的另一个数值 for j in range(i+1,len(nums)): #对列表剩余元素进行不重复遍历 if bb == nums[j]: #如果存在与另一个数值相等的数 return(i,j) #返回两数的索引号
脚本逻辑
- 此脚本是使用逼近的思想,通俗来讲就是:用第一个数与列表中其余的值进行求和,查看是否与目标值一致
- 若一致,则求出两值得索引号即可
- 若不一致,丢弃第一个值,使用第二个值与剩余得值进行比较(不包括第一个值),直到遍历所有值或者遇到合适值为止