[LeetCode] 1. Two Sum 題解

問題描述

給定一個整數數組 nums 和一個目標數字 target,要求返回數組中兩個數字的下標,且這兩個數字加起來等於目標數字 targetpython

你能夠假設每組輸入將會有一個解決方案,且數組中同一個數字只能使用一次數組

例子:bash

輸入 nums = [2, 7, 11, 15], target = 9,
由於 nums[0] + nums[1] = 2 + 7 = 9,
因此 return [0, 1]。
複製代碼

問題難度

Easy數據結構

解題思路

指望遍歷一遍數組,就能夠找到兩個符合條件的數字,遍歷過程當中,每讀到一個數字,須要完成兩個動做:ui

  1. 查詢「補數集合」,判斷該數字的「補數」(目標數字減去該數)是否存在,若是存在,則返回補數和該數的下標
  2. 若是不存在,那麼該數極可能是別的數的「補數」,將該數和下標放入「補數集合」中

能夠看到「補數集合」是這裏的關鍵,它要以儘量快的速度完成:spa

  1. 查詢某個補數是否存在
  2. 插入一個補數

這兩個操做。.net

而咱們都知道,對於這種需求,有一種數據結構能夠達到 O(1) 的時間複雜度,那就是哈希表,說到這裏,咱們就能夠動手寫代碼了: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 行是在「補數」不存在的狀況下,將當前數做爲其餘數的「補數」,連同下標一塊兒插入到「補數集合」中

因而,上面代碼就實現了經過遍歷一次數組,就能夠找到符合條件的兩個數的下標,時間複雜度爲 O(n)

原題連接

相關文章
相關標籤/搜索