收集一些python的練習題,在追求應用的同時千萬不要忘了基礎的東西,我會不定期的總結一些我做過的小題目,大家一起進步!
題目描述
給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,并返回他們的數組下標。
解題一
這道題拿過來首先很容易想到暴力解決沒錯我第一步也是這么干的,很容易想到兩個循環進行判斷,這個代碼很容易看的懂,也很容易理解,不做多解釋,但是這樣運行的時間和所占內存都是非常大的。很不好的一種方法。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
result = []
len_nums = len(nums)
for i in range(len_nums):
for j in range(i+1,len_nums):
num = nums[i] + nums[j]
if num == target:
result.append(i)
result.append(j)
break
return result
解題二
利用哈希字典查找,通過枚舉將數值對應關系放入字典中,然后判斷目標值和每一個值得差值在不在字典中。時間復雜度為O(n) 空間復雜度為O(n)
def tow_sum_with_dict(nums, target):
_dict = {}
for i, m in enumerate(nums):
_dict[m] = i
for i, m in enumerate(nums):
j = _dict.get(target - m)
if j is not None and i != j:
return [i, j]
if __name__ == '__main__':
nums = [2, 7, 11, 15]
target = 9
a = tow_sum_with_dict(nums,target)
解題三
一遍字典模擬Hash,其實這個是接著上一個來的,對上一種方法的優化
當判斷不符合條件時往字典中添加鍵值。這樣能夠節省內存的消耗。
def tow_sum_with_dict2(nums, target):
_dict = {}
for i, m in enumerate(nums):
if _dict.get(target - m) is not None:
return [i, _dict.get(target - m)]
_dict[m] = i
有什么建議或不懂的歡迎評論方留言,我們一起溝通交流!
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
