从零开始刷LeetCode----两数之和
题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9,因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]
来源:力扣(LeetCode)
方法一:暴力破解法
拿到题目最简单的想法就是直接从列表nums中挑出两个数字,判断其相加的值是否等于target,而这只需要进行两个for循环进行列表的遍历。
1 # 暴力破解法 2 class Solution(object): 3 def twoSum(self, nums, target): 4 for i in range(len(nums)-1): 5 for j in range(i+1, len(nums)): 6 if nums[i] + nums[j] == target: 7 return [i, j]
方法二:python的list属性解法
我们可以根据list的可查找属性in进行编写代码,首先从列表nums中先抽取出一个数a,然后只需要判断target-a是否在列表nums中,这样只需要一次for循环遍历,大大提高代码效率。
1 # python的list属性解法 2 class Solution(object): 3 def twoSum(self, nums, target): 4 for i in range(len(nums)): 5 query_list = nums[i+1:] 6 if (target - nums[i]) in query_list: 7 return [i, nums.index(target - nums[i], i+1)]

方法三:哈希表查找法
因为list的in方法实际上还是需要在列表内遍历,这样还是会消耗大量时间,所以为了进一步提高程序速度,我们可以通过用空间换取时间的方法,即建立一个哈希表,通过直接查询来代替遍历list。在python中,我们通过字典来代替哈希表。
1 # 哈希表查找法 2 class Solution(object): 3 def twoSum(self, nums, target): 4 hashmap={} 5 for ind,num in enumerate(nums): 6 hashmap[num] = ind 7 for i,num in enumerate(nums): 8 j = hashmap.get(target - num) 9 if j is not None and i!=j: 10 return [i,j]


浙公网安备 33010602011771号