三數之和 如何讓三隻指標幫你去重?

2021-10-07 03:24:36 字數 946 閱讀 5291

歡迎關注我的刷題專欄 zhangyixing1007/leetcode

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

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

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

滿足要求的三元組集合為: [ [-1, 0, 1], [-1, -1, 2] ]

原題戳這裡

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

我們來理解一下這句話。

q1:nums=[-1,-1,2], ans=[[-1,-1,2]]是重複的三元組嘛?

a1:顯然不是,這裡只有一組三元組,雖然這組三元組中有兩個-1,但,這也不叫重複。

q2:nums=[-1,-1,-1,2], ans=?

a2:ans=[[-1,-1,2]],這裡ans中的-1無論是取的第0/1/2個都沒有關係。

q1告訴我們想要避免重複值,顯然不是不允許三元組中存在重複的元素。這意味著,我們不能簡單粗暴直接對陣列去重。

q2告訴我們無論相同的元素有多少個,它們的三元組表示都不能重複–看起來可以用set直接對三元組去重?

是的,但還可以更加簡單。

以下為**,我會詳細注釋,它是如何完成答案中不可以包含重複的三元組這個目標的。

class

solution

else

if(nums[i]

+nums[l]

+nums[r]

<0)

else}}

return list;

}}

然後我們可以做一道 在此基礎上的變式題: 最接近的三數之和。

三數之和(雙指標)

給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 分析 題目要求 a ...

三數之和,排序 雙指標

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