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)                   #调用类中的方法,由于此方法会返回值,所以将值打印出来即可

【处理逻辑】

  1. 此脚本处理逻辑是生成一个新的数据记录处即字典,用于存储已经遍历的列表元素的索引号及元素值
  2. 由于列表遍历过程中是与字典进行遍历的,所以字典的键值是不会重复的
  3. 通俗来讲就是:一开始桶子是空的,不断拿数据与桶子里的数据进行比对,如果没有找到比对目标的值会放到桶子里,然后进行下一次的比对

 

脚本二及步骤注释

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)                                #返回两数的索引号

脚本逻辑

  1.  此脚本是使用逼近的思想,通俗来讲就是:用第一个数与列表中其余的值进行求和,查看是否与目标值一致
  2. 若一致,则求出两值得索引号即可
  3. 若不一致,丢弃第一个值,使用第二个值与剩余得值进行比较(不包括第一个值),直到遍历所有值或者遇到合适值为止

 

posted @ 2019-12-05 23:43  弈虫  阅读(244)  评论(0编辑  收藏  举报