整了个idea的leetcode插件,方便刷题,记录下刷的第一题!
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标
三种方法中最后一个是最开始想出来的,后来修改nums之后发现不能返回,就有了1和2两种方法!
题目中有说明:假设每种输入只会 对应一个答案。
有想法的朋友可以自己实现一下。
# 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 # # 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 # # 可以给定任意数组,并且返回下标列表 # # 示例: # # 给定 nums = [2, 7, 11, 15], target = 9 # # 因为 nums[0] + nums[1] = 2 + 7 = 9 # 所以返回 [0, 1] # # Related Topics 数组 哈希表 # python3解法,思路大致相同 # leetcode submit region begin(Prohibit modification and deletion) class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ dict = {} iList = [] for index, num in enumerate(nums): dict[num] = index for i, num in enumerate(nums): j = dict.get(target - num) if j is not None and i != j: iList.append(i) iList.append(j) return list(set(iList)) def Sum2(self, nums, target): dict = {} res = [] for index, num in enumerate(nums): dict[num] = index for i, num in enumerate(nums): j = dict.get(target - num) if j is not None and i != j: res.append((i, j)) del dict[target - num] del dict[num] return res def twosum(self, nums, target): # 初始化一个字典,用于记录(值:索引) dict = {} # 遍历enumerate(a), # enumerate() 函数用于将一个可遍历的数据对象(如列表、 # 元组或字符串)组合为一个索引序列, # 同时列出数据和数据下标。 for i, num in enumerate(nums): # 如果目标值(target)减去num在字典dict中 if target - num in dict: # 返回结果(target - num)以及结果的索引(i) return [dict[target - num], i] else: # 将num以及索引值添加到dict中 dict[num] = i if __name__ == '__main__': nums = [2, 7, 11, 15, 4, 5, 3, 6, 1, 8] target = 9 resl = Solution() print("第一种方法--twoSum结果是:", resl.twoSum(nums, target)) print("第二种方法--Sum2结果是:", resl.Sum2(nums, target)) print("第三种方法--twosum结果是:", resl.twosum(nums, target))
结果如下:
D:\anaconda\python.exe D:/software/idea/dataTemp/leetcode/editor/cn/[1]两数之和.py 第一种方法--twoSum结果是: [0, 1, 4, 5, 6, 7, 8, 9] 第二种方法--Sum2结果是: [(0, 1), (4, 5), (6, 7), (8, 9)] 第三种方法--twosum结果是: [0, 1]
文章评论