LeetCode0015 三數之和

2021-10-03 14:32:09 字數 1227 閱讀 2758

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

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

示例:

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

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

[[-1, 0, 1],

[-1, -1, 2]

]

首先,對原陣列進行排序,遍歷排序後的陣列,需要注意不是遍歷到最後乙個停止,而是到倒數第三個就可以;

其次,可以做個剪枝優化,即遍歷到正數的時候就break,因為陣列現在是有序的,如果第乙個要 fix 的數就是正數了,則後面的數字就都是正數,就永遠不會出現和為0的情況;

然後,還要加上重複就跳過的處理,處理方法是從第二個數開始,如果和前面的數字相等,就跳過,因為不想把相同的數字fix兩次;

再次,對於遍歷到的數,用0減去這個 fix 的數得到乙個target,然後只需要在之後找到兩個數之和等於target即可;

最後,用兩個指標分別指向 fix 數字之後的陣列的首尾兩個數,如果兩個數和正好為target,則將這兩個數和 fix 的數一起存入結果中。然後就是跳過重複數字的步驟,兩個指標都需要檢測重複數字。如果兩數之和小於target,則將左邊那個指標i右移一位,使得指向的數字增大一些。同理,如果兩數之和大於target,則將右邊那個指標j左移一位,使得指向的數字減小一些。

class

solution

;for

(int k =

0; k <

(int

)nums.

size()

-2;++k));

while

(i < j && nums[i]

== nums[i +1]

)++i;

while

(j < j && nums[j]

== nums[j -1]

)--j;

++i;

--j;

}else

if(nums[i]

+ nums[j]

< target)

else}}

return res;}}

;

LeetCode 0015 三數之和

給定乙個包含n個整數的陣列 nums,判斷nums中是否存在三個元素a,b,c,使得a b c 0?找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 排序 雙指標。首先對原陣列進行排...

學渣帶你刷Leetcode0015 三數之和

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

leetcode之15三數之和Golang

題目的要求有兩個,首先是三個數的和為0,其次是這種和為0的三元組不能重複。當給定乙個陣列,我們求滿足和為0的三元組的時候核心思想使用的是暴力破解,也就是三重迴圈,遍歷三次陣列,但是在這裡我們給出如下優化 首先將陣列按照從小到大的順序排序 設定三個指標index,分別為i,j,k,他們分別代表陣列中滿...