這篇文章主要介紹LeetCode如何解決三數(shù)之和問題,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)建站專注于灤平網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供灤平營(yíng)銷型網(wǎng)站建設(shè),灤平網(wǎng)站制作、灤平網(wǎng)頁設(shè)計(jì)、灤平網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造灤平網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供灤平網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
1
題目描述
給定一個(gè)整數(shù)數(shù)組nums,判斷nums中是否存在三個(gè)元素 a,b,c ,使得 a + b + c = 0 。如不存在返回[],如存在返回所有滿足條件且不重復(fù)的答案。如:輸入[-1,0,1,2,-1,-4]返回[[-1,0,-1],[-1,-1,2]],如輸入[-3,3],返回[]。
2
解題
思路一:哈希表
本題要找到滿足條件的三個(gè)元素,當(dāng)固定第一個(gè)元素a,則題目轉(zhuǎn)化成找到b、c使得和為-a的問題,即與LeetCode刷題DAY 8:兩數(shù)之和中問題一致,因此也可用哈希表的方法解決。
class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: if len(nums)<3: return [] nums = sorted(nums) a = list() for i in range(len(nums)-2): if i>0 and nums[i]==nums[i-1]: continue h_map = {} target = -nums[i] for j in range(i+1,len(nums)): if target - nums[j] in h_map: a.append(sorted([nums[i],nums[j],target-nums[j]])) h_map[nums[j]]=j return list(set([tuple(t) for t in a]))
思路二:雙指針
當(dāng)對(duì)數(shù)組完成排序并固定第一個(gè)元素a,則題目與LeetCode刷題DAY 9:兩數(shù)之和II中問題一致,可用雙指針方法解決。
class Solution: def threeSum(self, nums: List[int]) -> List[List[int]]: if len(nums)<3: return [] nums = sorted(nums) a = list() for i in range(len(nums)-2): if i>0 and nums[i]==nums[i-1]: continue x = i+1 y = len(nums)-1 target = -nums[i] while x<y: if nums[x]+nums[y] == target: a.append(sorted([nums[i],nums[x],nums[y]])) x += 1 elif nums[x]+nums[y] < target : x += 1 else: y -= 1 return list(set([tuple(t) for t in a])
以上是“LeetCode如何解決三數(shù)之和問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站標(biāo)題:LeetCode如何解決三數(shù)之和問題
鏈接分享:http://jinyejixie.com/article32/pgissc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站內(nèi)鏈、品牌網(wǎng)站制作、網(wǎng)站設(shè)計(jì)公司、企業(yè)建站、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)