从零开始刷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]

 

posted @ 2020-04-19 16:58  fsencen  阅读(149)  评论(0)    收藏  举报