給定乙個包含n
個整數的陣列 nums,判斷nums
中是否存在三個元素a
,b
,c
,使得a + b + c = 0
?找出所有滿足條件且不重複的三元組。
**注意:**答案中不可以包含重複的三元組。
例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[ [-1, 0, 1],
[-1, -1, 2]
]
排序 + 雙指標。
首先對原陣列進行排序;
選定乙個nums[i]
,再用兩個指標l
和r
指向其後子陣列的兩端,計算三個數的和是否等於0:
如果nums[i] > 0
,則三數之和必定不為0,結束迴圈;
如果nums[i] == nums[i-1]
,說明該數字重複,繼續操作會導致結果重複,應該跳過;
收縮l
和r
,計算三數之和:
當sum == 0
時,若nums[l] == nums[l+1]
會導致結果重複,跳過,l++
;
當sum == 0
時,若nums[r] == nums[r-1]
會導致結果重複,跳過,r--
。
class
solution
else
if(sum <0)
else
if(sum >0)
}}return res;
}}
時間複雜度: o(n
2)
o(n^2)
o(n2);
空間複雜度: o(1
)o(1)
o(1)
。同上。
LeetCode0015 三數之和
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 首先,對原陣列進行排...
學渣帶你刷Leetcode0015 三數之和
給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 請你找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例 給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 乙個陣列,找到裡...
leetcode之15三數之和Golang
題目的要求有兩個,首先是三個數的和為0,其次是這種和為0的三元組不能重複。當給定乙個陣列,我們求滿足和為0的三元組的時候核心思想使用的是暴力破解,也就是三重迴圈,遍歷三次陣列,但是在這裡我們給出如下優化 首先將陣列按照從小到大的順序排序 設定三個指標index,分別為i,j,k,他們分別代表陣列中滿...