題目描述:
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,
使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組
例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[ [-1, 0, 1],
[-1, -1, 2]
]
解題思路
使用雙指標法,具體步驟如下
1、對陣列進行排序
2、對陣列中的每個數都進行遍歷,每次將本次所遍歷的數字i作為基準
3、定義雙指標,指標left初始值為i+1,指標right初始值為nums.length-1
4、若nums[i]+nums[left]+nums[right]=0,則記錄在案,left++,right–;若三數之和大於0,則right–;若三數之和小於0,則left++;
需要注意的點:
1、去重:在遍歷i的時候,若nums[i]==nums[i–],則跳過
具體實現**
public
class
solution
// }
// }
arrays.
sort
(nums)
;for
(int x=
0;x) system.out.
println()
;//雙指標法
int i;
int len=nums.length;
list
> res =
newarraylist
<
>()
;for
(i=0
;i2;i++
)while
(left==nums[right-1]
) left++
; right--;}
else
if(nums[i]
+nums[left]
+nums[right]
>0)
else}}
//去重
return res;
}}
總結
1、arrays.sort實在是太好用了
2、雙指標實在是太好了
3、說來說去還是弱雞
LeetCode 15 三數之和
15.給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組 方法一,個人解法正確,但是效率太低,時間複雜度o n 3 時間超時,無法提交至leetcode public s...
leetcode 15 三數之和
給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 class solutio...
leetcode15 三數之和
給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 先找兩數之和,然後再用un...