題目描述
給你乙個包含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)
,我們固定i
,j
和k
分別從i + 1
和n - 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 分析排序 雙指標避免...