(python)給定一個整數陣列和一個目標值,找出陣列中和為目標值的兩個數--演算法
阿新 • • 發佈:2019-01-03
1、使用最容易理解的遍歷陣列進行查詢
def solution(nums,target): #如果列表長度小於2,則直接結束 if len(nums) < 2: return #兩次迴圈列表,分別對列表中的所有可能的數字進行相加 #迴圈兩次列表對應的時間複雜度為O(n²) for i in range(0, len(nums) - 1): for j in range(i+1, len(nums)): if nums[i] + nums[j] == target: return [i, j]
2、使用雜湊表,通過以空間換取速度的方式,我們可以將查詢時間從 O(n)降低到 O(1)
在python中列表字典的即為雜湊型別
def solution(nums,target): #新建立一個空字典用來儲存數值及其在列表中對應的索引 dict1 = {} #遍歷一遍列表對應的時間複雜度為O(n) for i in range(0, len(nums)): #相減得到另一個數值 num = target - nums[i] #如果另一個數值不在字典中,則將第一個數值及其的索引報錯在字典中 #因為在字典中查詢的時間複雜度為O(1),因此總時間複雜度為O(n) if num not in dict1: dict1[nums[i]] = i #如果在字典中則返回 else: return [dict1[num], i]