
这个题过于经典,是个easy题型,但是因为在3sum之前想复习一下所以先写一下思路。
首先这个followup看完就知道一开始肯定是有brute force解法的,两次for循环找到相加为target的就直接返回
现在我们看看如何能够不用两个for-loop。
首先就是我们需要找到两个数相加 = target,但是其实我们也可以反向想一下,只要找到一个数 = target - 自身就可以了
比较简单的想法是我们循环两次,第一次保存target-自身,第二次寻找自身是否在target-自身里存在且自身的i不等于target-自身的 i
hashmap = {}
for i in range(len(nums)):
hashmap[nums[i]] = i
for i in range(len(nums)):
complement = target - nums[i]
if complement in hashmap and hashmap[complement] != i:
return [i, hashmap[complement]]
# If no valid pair is found, return an empty list
return []Python而如果我们一个for-loop可以循环自身,同时又用的方式找到之前循环过的数字是否 = target - 自身,那么我们就用一个for loop就可以直接返回这个pair了
题目里的Only One Valid answer exists就很重要,因为有且只有一对,所以找到之后马上返回是没问题的。并不会出现找不到or重复的问题。
用方式找数字非常容易想到hash table因为key的保存是hash,查表的时候只需要O(1)
所以具体Code如下:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
dic = {}
for i, num in enumerate(nums):
if target - num in dic:
return (i, dic[target-num])
dic[num] = i
Python
文章评论