給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
示例:
給定陣列 nums = [-1, 0, 1, 2, -1, -4],方法一:列舉。將所有可能的對數都列舉出來,檢查是否滿足 a + b + c = 0 的條件,但該方法的執行時間為 o(n^3), 直覺告訴我們,這並不高效。滿足要求的三元組集合為:
[ [-1, 0, 1], [-1, -1, 2]]
方法二:排序後二分查詢。首先排序預處理,然後巢狀兩個迴圈 i , j, 對於每乙個元素 nums[i], nums[j],使用二分查詢是否存在滿足 -1 * ( nums[i] + nums[j) 的元素。這種方法的執行時間為 o(n^2 logn).
**:
class
solution);
}}//將集合中元素複製到陣列中來
vector< vector<
int>> result;
for(
auto it = res.
begin()
; it != res.
end(
); it++
) result.
push_back
(*it)
;return result;}}
;
方法三:排序後雙指標。排序預處理後,遍歷陣列,對於每乙個元素 nums[k], 設定兩個指標 i, j, 其中 i = k + 1, j = nums.size() - 1, i, j 指標向中間移動。
當 i < j 時,迴圈計算 temp = nums[i] + nums[j] + nums[k]. 若 temp < 0, i+=1; 若 temp > 0, 則 j -= 1; 若 temp == 0, 則記錄三元組。
時間複雜度為 o(n^2).
**:
class
solution
else
if( temp >0)
else
if( temp ==0)
);i++
, j--
;while
( i < j && nums[i]
== nums[i-1]
&& nums[j]
== nums[j+1]
) i++
, j--;}
}}return res;}}
;
每日刷題 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...
每日刷題 四數之和
給定乙個包含 n 個整數的陣列 nums 和乙個目標值 target,判斷 nums 中是否存在四個元素 a,b,c 和 d 使得 a b c d 的值與 target 相等?找出所有滿足條件且不重複的四元組。注意 答案中不可以包含重複的四元組。示例 給定陣列 nums 1,0,1,0,2,2 和 ...
每日刷題 15 三數之和(雙指標)
給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 請你找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。示例給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 題目鏈結 本題與兩...