收集一些python的練習(xí)題,在追求應(yīng)用的同時(shí)千萬不要忘了基礎(chǔ)的東西,我會(huì)不定期的總結(jié)一些我做過的小題目,大家一起進(jìn)步!
題目描述
給定一個(gè)整數(shù)數(shù)組 nums 和一個(gè)目標(biāo)值 target,請(qǐng)你在該數(shù)組中找出和為目標(biāo)值的那 兩個(gè) 整數(shù),并返回他們的數(shù)組下標(biāo)。
解題一
這道題拿過來首先很容易想到暴力解決沒錯(cuò)我第一步也是這么干的,很容易想到兩個(gè)循環(huán)進(jìn)行判斷,這個(gè)代碼很容易看的懂,也很容易理解,不做多解釋,但是這樣運(yùn)行的時(shí)間和所占內(nèi)存都是非常大的。很不好的一種方法。
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
解題二
利用哈希字典查找,通過枚舉將數(shù)值對(duì)應(yīng)關(guān)系放入字典中,然后判斷目標(biāo)值和每一個(gè)值得差值在不在字典中。時(shí)間復(fù)雜度為O(n) 空間復(fù)雜度為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,其實(shí)這個(gè)是接著上一個(gè)來的,對(duì)上一種方法的優(yōu)化
當(dāng)判斷不符合條件時(shí)往字典中添加鍵值。這樣能夠節(jié)省內(nèi)存的消耗。
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
有什么建議或不懂的歡迎評(píng)論方留言,我們一起溝通交流!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

