在评论区看到一种很简洁、直观的方法,运行速度击败了99%,记录一下,用到了python内置的enumerate函数 题目描述:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
先贴出来原帖链接:小白python几种解法 主要记录一下评论区bruce的方法,代码如下
class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: dct = {} for i,n in enumerate (nums): cp = target - n if cp in dct: return [dct[cp],i] else: dct[n] = i分析一下: 主要用了字典的键值对和函数enumertate的用法 首先建立一个空字典dct; 然后用enumerate函数将数组nums遍历组合一个索引序列,下标为i,数据为n 如果target减去数据n的值在字典n中,则返回字典键值对值为cp的索引,和此时n的下标i 如果不在字典中,就将这个值存给字典中,等于说是遍历的同时生成字典,不断向前查字典。 例如对于示例来讲, 第一次循环: i= 0,n = 2 if不成立,此时的字典dct仍未空 再将dct[2] = 0,字典内有了值 第二次循环: i = 1 ,n =7 cp = target - 7 2在字典中,返回cp值的索引与i 即[0,1]