給定一個整數數組 nums
和一個目標數字 target
,要求返回數組中兩個數字的下標,且這兩個數字加起來等於目標數字 target
python
你能夠假設每組輸入將會有一個解決方案,且數組中同一個數字只能使用一次數組
例子:bash
輸入 nums = [2, 7, 11, 15], target = 9,
由於 nums[0] + nums[1] = 2 + 7 = 9,
因此 return [0, 1]。
複製代碼
Easy
數據結構
指望遍歷一遍數組,就能夠找到兩個符合條件的數字,遍歷過程當中,每讀到一個數字,須要完成兩個動做:ui
能夠看到「補數集合」是這裏的關鍵,它要以儘量快的速度完成:spa
這兩個操做。.net
而咱們都知道,對於這種需求,有一種數據結構能夠達到 的時間複雜度,那就是哈希表,說到這裏,咱們就能夠動手寫代碼了:code
class Solution(object):
def twoSum(self, nums, target):
complements = {}
for i, x in enumerate(nums):
if target - x in complements:
return [complements[target - x], i]
complements[x] = i
複製代碼
以上,complements
是咱們的「補數集合」,在 Python 中,字典(dict)數據結構就是用哈希表實現的,因此這裏 complements
就定義爲一個字典。leetcode
第 4 行咱們依次遍歷數組get
第 五、6 行用來判斷當前數的「補數」是否存在,若是存在則返回「補數」所在的下標和當前數的下標
第 7 行是在「補數」不存在的狀況下,將當前數做爲其餘數的「補數」,連同下標一塊兒插入到「補數集合」中
因而,上面代碼就實現了經過遍歷一次數組,就能夠找到符合條件的兩個數的下標,時間複雜度爲 。