1 import time 2 3 #方法一: 4 class Solution: 5 def twoSum(self, nums, target): 6 for i in range(len(nums)): #第一次循环列表 7 for j in range(i+1,len(nums)): #第二次循环列表应该把第一次循环的那个数字排除在外 10 if nums[i] +nums[j] == target: 11 return j,i 12 else: 13 continue 14 15 #方法二: 16 class Solution: 17 def twoSum(self, nums, target): 18 for i in range(len(nums)): 19 if target -nums[i] in nums and i !=nums.index(target -nums[i]): #如果差值在列表中且不是同一个元素,就返回两个元素的索引 20 return [i,nums.index(target -nums[i])] 21 else: 22 continue 23 24 #方法三 25 class Solution: 26 def twoSum(self, nums, target): 27 dic = {} 28 for i,num in enumerate(nums): #先把列表所有的元素按照索引为值,数字为键的方式放入字典中。 29 dic[num] = i 30 for i,num in enumerate(nums): 31 j = dic[target-num] #以差值为键,在字典中查找有没有对应的值。 32 if i!=j and j is not None: 33 return [i,j] 34 35 t1 = time.perf_counter() 36 solution = Solution() 37 a = solution.twoSum([2,7,11,15,2,6,98,23], 13) 38 t2 = time.perf_counter() 39 print(a) 40 print(t2-t1)
方法一是最常规的思维,就是嵌套循环,不断变量列表。方法二,用了一个循环,查看目标值减每次循环的值是否在列表中。方法三用了字典,提高了效率