LeetCode 三數之和 優化解法

2022-03-07 21:32:12 字數 791 閱讀 5448

題目:給定乙個包含 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...