題目:給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
例如, 給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[ [-1, 0, 1], [-1, -1, 2] ]
最開始做的解法是先將整個陣列排序;然後遍歷前兩個數(a和b)的所有情況(n^2);對於第三個數,則從剩餘的數中(即從第二個數下乙個位置開始到末尾)利用二分查詢出是否存在數字 -(a+b)即可。 複雜度o(n^2·logn) :
class solution
return false;
}}
最近做了另乙個陣列區間相關的題目,受其解法的啟發,打算對這道題解法進行優化。
還是先對陣列進行排序;對第乙個數字(a)進行遍歷,而然後在剩餘的數中用前後指標的方法找出兩個和為-a的數字:兩個指標left和right;left初始化為數字a的下一位置,right為最後乙個位置。比較nums[left]+nums[right]+a和0的大小;如果大於0則right--,小於就left++。 其中在新增結果集時需考慮去重問題,用個雜湊判斷是否有重複就行了,複雜度o(n^2·k) :
class solution else
l++; r--;}}
}return ans;
}}
leetcode 三數之和
給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 因為這次是要求輸出對應的三...
LeetCode 三數之和
題目描述 給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 題目分析 有序陣...
Leetcode 三數之和
解決方案一 class solution else if nums j nums k target else while i 1 1 i return lllist 解決方案2 class solution 如果有3個0,就直接作為乙個解 if zerosize 3 res.add arrays.a...