題目描述:給你乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?請你找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
示例:給定陣列 nums = [-1, 0, 1, 2, -1, -4],
滿足要求的三元組集合為:
[[-1, 0, 1],
[-1, -1, 2]
]題目分析:關鍵在於不重複,那麼為了不重複,可以先對陣列排序,同時在遍歷過程中控制迴圈下標和相鄰元素是否相等的判斷,達到去重的目的。繼續說,由於三數之和是固定的,那麼我們在知道其中兩個數之後,第三個數是確定的,所以我們可以固定乙個數,然後列舉另外兩個數。另外兩個數和是確定的,只要其中乙個增大,另外乙個必定減少,因此,可以採用雙指標進行雙向並行遍歷,減少時間複雜度。
對於本題「雙指標」,當我們需要列舉陣列中的兩個元素時,如果我們發現隨著第乙個元素的遞增,第二個元素是遞減的,那麼就可以使用雙指標的方法,將列舉的時間複雜度從 o(n2)減少至o(n)。為什麼是 o(n) 呢?這是因為在列舉的過程每一步中,「左指標」會向右移動乙個位置(也就是題目中的 b),而「右指標」會向左移動若干個位置,這個與陣列的元素有關,但我們知道它一共會移動的位置數為o(n),均攤下來,每次也向左移動乙個位置,因此時間複雜度為 o(n)。
**:
class
solution
else
if(sum<0)
else
r--;}
i++;//去重
while
(i2&&nums[i]
==nums[i-1]
) i++;}
return res;
}}
補充乙個類似的題目:
最接近的三數之和
與這個題目幾乎如出一轍的思路
class
solution
else}}
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 解 這道題一開...
三數之和(雙指標)
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 分析 題目要求 a ...
Leetcode15 三數之和(雙指標)
給定乙個包含 n 個整數的陣列 nums,判斷 nums 中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 給定乙個包含 n 個...