Question
给定一个整型数组,返回两个数的索引,这两个数之和等于目标值。你可以认为每一组输入只有一个解,并且不允许使用一个数两次.
例如:
给定nums=[2,7,11,15],target=9,由于nums[0]+nums[1]=target,所以返回[0,1].
Solution
Approach #1(Brute Force)
遍历每一个数以寻找另一个数等于$target-x$.
- Time complexity: $O(n^2)$. 对于每一个数,寻找另一个数所花时间是$O(n)$.
- Space complexity: $O(1)$.
Apporoach #2(One-pass Hash Table)
同样,我们遍历每一个数来寻找是不是存在第二个数等于$target-x$,但是借助于HashTable结构可以将寻找过程的时间复杂度从$O(n)$降到$(O(1)$. 为了使用HashTable结构加快搜索,我们需要在寻找的同时维护一个从数到索引的映射表.
- Time complexity: $O(n)$. 我们仅仅遍历数组一次,每一次查询时间是$O(1)$.
- Space complexity: $O(n)$. 我们需要额外的空间来维护一个映射表,这个表最多会存储$n$个元素.