LeetCode-15.三數之和(3Sum)

2021-02-08 極客算法

15. 三數之和

給你一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。

注意:答案中不可以包含重複的三元組。

示例:

給定數組 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:[ [-1, 0, 1], [-1, -1, 2]]

來源:力扣(LeetCode)

連結:https://leetcode-cn.com/problems/3sum/

Link:https://leetcode.com/problems/3sum/

雙指針

O(N^2)

之前的Two Sum, 是有哈希和雙指針兩種解法的。

但是,對於本題,不能包含重複答案。對於這樣的限制。排序更容易去重複, 需選擇合適的代表, 所以採用雙指針的方案

題目要求a + b + c = k, 只要遍歷一遍數組,賦值給a,剩下的就變成了2數之和問題。即b + c = k - a(k = 0)

class Solution:    def threeSum(self, nums: List[int]) -> List[List[int]]:
res = [] nums.sort()
for i in range(len(nums) - 2):
if i > 0 and nums[i] == nums[i - 1]: continue
a = nums[i] left = i + 1 right = len(nums) - 1
while left < right:
if nums[left] + nums[right] == -a: res.append([a, nums[left], nums[right]])
while (left < right and nums[left] == nums[left + 1]): left += 1
while (left < right and nums[right] == nums[right - 1]): right -= 1
left += 1 right -= 1 elif nums[left] + nums[right] > -a: right -= 1 else: left += 1
return res

--End--


相關焦點

  • leetcode-15三數之和
    三數之和:https://leetcode-cn.com/problems/3sum/1、題目描述
  • 三數之和 | Leetcode題解
    兩數之和。這個問題是比較簡單的, 我們只需要對數組進行排序,然後雙指針解決即可。加上需要外層遍歷依次數組,因此總的時間複雜度應該是 O(N^2)。15.3-sum在這裡之所以要排序解決是因為, 我們算法的瓶頸在這裡不在於排序,而在於 O(N^2),如果我們瓶頸是排序,就可以考慮別的方式了。
  • 四數之和(18)-四數之和(454)-LeetCode
    滿足要求的四元組集合為:[[-1,  0, 0, 1], [-2, -1, 1, 2], [-2,  0, 0, 2]]來源:LeetCode連結:https://leetcode-cn.com/problems/4sum(1)排序+雙指針    延續兩數之和、三數之和的雙指針+排序解題思路
  • LeetCode-18.四數之和(4Sum)
    四數之和給定一個包含 n 個整數的數組 nums 和一個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d ,使得 a + b + c + d 的值與 target 相等?找出所有滿足條件且不重複的四元組。注意:答案中不可以包含重複的四元組。
  • LeetCode-1.兩數之和(Two Sum)
    相信每個想刷leetcode的人,第一次打開網站,就從這道題開始的。一起起航吧,Great Voyage.
  • 三數之和姊妹題——LeetCode題目16:最接近的三數之和
    找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。示例輸入:nums=[-1, 2, 1, 4], target=1輸出:2解釋:與 target 最接近的三個數的和為 2. (-1 + 2 + 1 = 2).
  • 15. 三數之和 --- leetcode
    給你一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?
  • ​LeetCode刷題實戰15題: 三數之和
    今天和大家聊的問題叫做三數之和 ,我們先來看題面:https://leetcode.com/problems/3sum/描述給定一個整數的數組,要求尋找當中所有的a,b,c三個數的組合,使得三個數的和為0.注意,即使數組當中的數有重複,同一個數也只能使用一次。
  • [LeetCode] 1022. Sum of Root To Leaf Binary Numbers 從根到葉的二進位數之和
    實際上就是一道變形的路徑之和的題目,關於路徑之和,LeetCode 有很多道題目,比如 Path Sum IV,Path Sum III,Binary Tree Maximum Path Sum,Path Sum II,Path Sum,和 Minimum Path Sum 等等。
  • 【Leetcode刷題練Python】1. 兩數之和
    官方網址是:http://leetcode.com/,打開瀏覽器輸入網址,就可以在線寫代碼、提交、查看算法的優略以及個人別實現算法的對比等等。開箱即用,非常方便。上面收錄的算法題目,大多來自大公司的筆試面試題,分為簡單、中等、困難三個等級,從基礎到高級都有。
  • LeetCode 熱題 HOT 100 15. 三數之和
    題目給你一個包含 n 個整數的數組 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?
  • 每天一道leetcode18-四數之和
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.20號打卡今天的題目leetcode61:https://leetcode-cn.com/problems/rotate-list/description/昨天的題解題目 每天一道leetcode18- 四數之和分類:雙指針
  • leetcode:對撞指針系列
    leetcode-167:描述:給定一個已按照升序排列 的有序數組,找到兩個數使得它們相加之和等於目標數。
  • ​LeetCode刷題實戰18: 四數之和
    今天和大家聊的問題叫做四數之和 ,我們先來看題面:https://leetcode-cn.com/problems/4sum/Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such
  • leetcode專項刷題(數組)-兩數之和/訪問所有點最小時間/種花問題
    本文將繼續分享leetcode上數組專項的刷題,也是基礎題,但是屬於必須會的那種範疇。接下來應該還有最後一篇關於基礎數組專項的分享,給自己留個底。算法都是基於python。01兩數之和 II - 輸入有序數組題目解釋
  • 每日一道 LeetCode (56):四數之和
    每日一道 LeetCode (56):四數之和每天 3 分鐘,走上算法的逆襲之路。
  • LeetCode 熱題 HOT 100(00,兩數之和)
    LeetCode 熱題 HOT 100(00,兩數之和)不夠優秀,發量尚多,千錘百鍊,方可成佛。算法的重要性不言而喻,無論你是研究者,還是最近比較火熱的IT 打工人,都理應需要一定的算法能力,這也是面試的必備環節,算法功底的展示往往能讓面試官眼前一亮,這也是在大多數競爭者中脫穎而出的重要影響因素。
  • 我說你在 LeetCode 練死勁不好用,他說你這也沒用,我說我這個有用.
    K 個一組翻轉鍊表21https://leetcode-cn.com/problems/reverse-nodes-in-k-group3. 無重複字符的最長子串19https://leetcode-cn.com/problems/longest-substring-without-repeating-characters15.
  • LeetCode
    一維數組的動態和連結:https://leetcode-cn.com/problems/running-sum-of-1d-array/給你一個數組 nums 。    }    for(int i=0;i<candiesSize;i++)    {        test[i]=(max<=candies[i]);    }    *returnSize=candiesSize;    return test;}1.兩數之和
  • 《兩數之和的奇偶性》教學安排
    教學內容:教科書第15頁例2及第16頁第4題。教學目標:1.通過探究,知道兩數之和的奇偶性。2.能藉助幾何直觀,認識兩數之和奇偶性的必然性。有的同學已經有了猜想,和不可能是奇數,看來奇偶數加法運算中蘊含著規律,今天我們就一起來探尋「兩數之和的奇偶性」(板書課題)。(二)探索與猜想,驗證與歸納1.明確探究的問題。剛才做遊戲,一個數加上它本身,只有兩種情況,偶數+偶數,奇數+奇數。