領扣刷題 15 三數之和

2021-08-28 15:17:41 字數 1026 閱讀 8955

題目要求:

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

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

小白第一次寫部落格,希望大佬多多指教。

這是一道在領扣上標記為中等的陣列題目,題目的難點在於去除重複的三元組。我們想去除重複的元素,就要先弄清楚,重複的答案是如何出來的,按照正常的思路,我們可以跑乙個三層for迴圈,每一次都不斷由前面的和後面的匹配,直到所有的組合被匹配完畢,滿足要求的答案被找到,但是在跑的過程中如果前面的數有和後面的數重複的,那我們跑的過程中必然會將其記錄兩次。弄清楚了重複的原因,現在就需要想辦法去除重複。這樣問題就變成了陣列的去重,陣列去重我們一般採用的都是先排序的方式,前面與後面對比,去重。

按照我們的思路**如下:

//程式語言c++

class solution

k=j+1;

while(k<=len-1)

sum=nums[i]+nums[j]+nums[k];

if(sum==0)

else

k++;

} j++;}}

return a;}};

提交之後,會提示超時,所以我們改進**,考慮到存在的三重for迴圈是為了得到和0匹配的結果,在借鑑了大佬的方法之後,我們可以將其改為二重迴圈,利用前後向中間靠的原則,尋找答案。這是一種程式設計的基本技巧,如果沒有掌握可以借鑑學習,改變後的**如下:

class solution

sum=nums[i]+nums[j]+nums[k];

if(sum==0)//儲存資料

else if(sum>0)//如果大於0代表資料過大則將k減小,則匹配的k值減小

k--;

else

j++;}}

return a;}};

可以發現這一次很輕鬆就通過了,完成了這道題目之後我們可以嘗試去做16,18兩題,思路大致相同。

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 剪枝,left和ri...

力扣刷題 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 so...

LeetCode C 刷題計畫 15 三數之和

author csu張揚 email csuzhangyang gmail.com or csuzhangyang qq.com category difficulty pass rate br algorithms medium 24.31 array two pointers adobe ama...