安静如鸡

  • Home
  • About Me
  • Contact Me
  • 东京女子篮球活动记录
一个博客
  1. 首页
  2. Tech
  3. Leetcode
  4. 正文

1. Two Sum

2026-07-14 0人点赞 0条评论

这个题过于经典,是个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可以循环自身,同时又用O(1)O(1)的方式找到之前循环过的数字是否 = target - 自身,那么我们就用一个for loop就可以直接返回这个pair了

题目里的Only One Valid answer exists就很重要,因为有且只有一对,所以找到之后马上返回是没问题的。并不会出现找不到or重复的问题。

用O(1)O(1)方式找数字非常容易想到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
标签: hash table
最后更新:2026-07-14

Ellison

什么都懂点,什么都不精。属于混吃等死,享受生活,过一天算一天的享乐主义。喜欢电影,阅读,以及游戏和美食。

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2024 安静如鸡. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang