leetcode 15 三數之和

2021-10-06 05:29:12 字數 1219 閱讀 3781

給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。

注意:答案中不可以包含重複的三元組。

示例:

給定陣列 nums = [-1, 0, 1, 2, -1, -4],

滿足要求的三元組集合為:

[[-1, 0, 1],

[-1, -1, 2]

]之前在做了two-sum之後再做這個,我的第一反應竟然是保留求two-sum的那個函式,然後遍歷陣列,去用two-sum找0-num[i],然後我就順著第一反應寫了,發現有各種問題。two-sum中預設唯一解,這裡則可能多解。傳值不好傳,乙個數字有多種方案時傳回去是個vector的陣列,把它再放到ans裡會再次消耗時間。還有就是去重,前面問題都好說,這個去重,我那種方法寫出來我就完全不會弄了。第一反應有時候太不靠譜了,哭,是我太菜了。

折騰半天最後還是去瞄了題解,然後就覺得自己為什麼這麼蠢,給全人類丟臉了。排序 + 雙指標,瞬間解決問題wdm,我真的rz,唉。

1. 排序之後nums[i] > 0時,右邊不會再出現解,break

2. 如果num[i]已出現過,continue

3. l = i + 1, r = n - 1, while (l < r) 時,計算nums[i] + nums[l] + nums[r]

4. sum == 0,滿足,push,然後重複的去除掉,然後l和r進入下一位置

5. sum < 0,說明num[l]小了,l++

5. sum > 0,說明num[r]大了,r--

class solution );

while (l < r && nums[l] == nums[l + 1]) l++;

while (l < r && nums[r] == nums[r - 1]) r--;

l++; r--;

} if (tnum > 0) r--;

if (tnum < 0) l++;}}

return ans;

}};

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...