15 三數之和

2021-10-14 17:06:54 字數 1224 閱讀 1584

題目描述

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

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

示例1

輸入:nums = [-1,0,1,2,-1,-4]

輸出:[[-1,-1,2],[-1,0,1]]

示例2
輸入:nums = 

輸出:

示例3
輸入:nums = [0]

輸出:

題解:

排序 + 雙指標。

首先對nums排序,這個可以方便我們後面的操作。

對於三元組(i, j, k),我們固定ijk分別從i + 1n - 1開始執行以下操作:

判重以測試樣例[-2,-2,0,0,2,2]為例:

同時,在nums[i] > 0時直接停止迴圈,應該能加速不少。

時間複雜度:o(n

2)

o(n^2)

o(n2)

額外空間複雜度:o(1

)o(1)

o(1)

**:

class

solution

;sort

( nums.

begin()

, nums.

end())

;int t;

vectorint>> ret;

for(

int i =

0; i < n -2;

++i ));

while

( j < k && nums[j]

== nums[j -1]

)++j;

while

( k > j && nums[k]

== nums[k +1]

)--k;}}

}return ret;}}

;/*記憶體:19.6mb,擊敗:97.93%

*/

15 三數之和

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 最首先想到的是來三層...

15 三數之和

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。有兩種寫法 第一種耗時久,但容易解讀 class solution if nums.length 3 else if ...

15 三數之和

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 分析排序 雙指標避免...