leetcode三數之和 雙指標

2021-10-07 03:22:32 字數 1015 閱讀 9548

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