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