两数之和
题目描述:
做题思路:
我是用python写的,下面说几种方法:
- 第一种:方法是在
nums
这个数集中看看是否能找到target - nums[i]
,当然要保证在这个数只有一个,不能重复,最后用index
找到该数对应位置,再返回[i,j]
。这样算耗时会比较长。
class Solution:
def twoSum(self, nums, target):
lens = len(nums)
for i in range(lens):
if (target - nums[i]) in nums:
if (nums.count(target - nums[i]) == 1)&(target - nums[i] == nums[i]):
continue
else:
j = nums.index(target - nums[i], i+1)
break
return [i,j]
- 第二种:总的方法还是找
target - nums[i]
,但是这里用到了字典的方法,然后把dic[nums[i]] = i
放在循环最后,这样可以避免值的重复。这种方法耗时大大降低。
class Solution:
def twoSum(self, nums, target):
lens = len(nums)
dic = {}
for i in range(lens):
if target - nums[i] in dic:
return [dic[target - nums[i]], i]
dic[nums[i]] = i
return None
- 第三种:这个方法还是要用字典,但是我们用到了
enumerate()
函数,它可以将列表、元组或字符串组合为一个索引序列,并列出数据和数据下标,一般用在 for 循环当中。所以大大简便了运算步骤。耗时也是很短。
class Solution:
def twoSum(self, nums, target):
dic = {}
for i,numbs in enumerate(nums):
if target - numbs in dic:
return (dic[target - numbs], i)
dic[numbs] = i
return None