方法1 两遍循环
def twoSum(self, nums, target):
n=len(nums)
for i in range(n):
for j in range(n):
if nums[i]+nums[j]==target:
return [i,j]
时间:5896ms
空间:14.6MB
方法2 把第二次循环变为判断target-nums[i]是否存在
def twoSum(self, nums, target):
n=len(nums)
for i in range(n):
j=target-nums[i]
if j in nums:
if (nums.index(j))!=i:
return [i,nums.index(j)]
时间:1104ms
空间:14.7MB
方法3只比较i之前的数
def twoSum(self, nums, target):
n=len(nums)
for i in range(n):
temp=nums[:i] #只比较i之前的数
j=target-nums[i]
if j in temp:
return [temp.index(j),i]
时间:448ms
空间:14.6MB
方法4最快的一种方法是用哈希表,很多大神的思路是
def twoSum(self, nums, target):
hashmap={}
for i,num in enumerate(nums):
if hashmap.get(target - num) is not None:
return [i,hashmap.get(target - num)]
hashmap[num] = i #这句不能放在if语句之前,解决list中有重复值或target-num=num的情况
时间:68ms
空间:15.2MB