方法如下:
先排序,外部迴圈 i 從 0 到 nums.size()-2;
內部迴圈 j 從 i+1始,k從nums.size()-1始;
如果發現nums[ j ] +nums[ k ] == - num[ i ],在num[ i ],nums[ j ],nums[ k ] 這三個數構成的陣列和已經得到的滿足條件的任一陣列都不重複的情況下,把它pushback進入res;
其中issame()是乙個判斷兩個陣列是否相同的函式;
其中需要強調一點,我們是在得到乙個滿足a+b+c=0的temp時,再去判斷它和已有的陣列是否重複了,這是可以的;但如果我們在一開始就把nums陣列的所有重複元素刪除,按照我們的演算法 是不是res裡面 就永遠不會出現重複的陣列呢?
答案是肯定的,大家可以結合「 nums經過了排序 和 我們的演算法思路 」 這兩點 很容易想明白;
但是設想這樣一組輸入:nums = ;
如果我們 sort 後刪除了nums的所有重複元素,那麼-2,-2,4這一組結果 將永遠得不到;
因此,我也只能依照演算法中的 排除重複 的方法行事;
**如下:
class
solution
;//j++,k-- 繼續判斷
bool nosame =1;
//先假定res裡面 沒有和temp重複的陣列
for(
int t =
0; t < res.
size()
; t++)if
(nosame)
res.
push_back
(temp);}
else
if(nums[j]
+ nums[k]
<
-nums[i]
)//b+c 稍小時
j++;else k--
;//b+c稍大時}}
return res;
}bool
issame
(vector<
int>
&nums1, vector<
int>
&nums2)
//判斷兩個陣列是否相同;
};
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...