描述
給出乙個有n個整數的陣列s,在s中找到三個整數a, b, c,找到所有使得a + b + c = 0的三元組。
在三元組(a, b, c),要求a <= b <= c。
結果不能包含重複的三元組。
樣例如s = , 你需要返回的三元組集合的是:
(-1, 0, 1)
(-1, -1, 2)
題目鏈結
分析
因為題目說不能出現重複陣列,所以我們需要排除這種情況,一旦發現有連續相等的數字,我們就跳過這個重複值。剩下的就比較簡單了:
首先,我們需要對陣列進行排序;然後,我們固定三個數之中的乙個,讓它從頭到尾地遍歷一次。對於剩下的兩個值,讓他們在第乙個固定值到結尾最後乙個值之間,通過三個數之後與目標判斷其大小,好讓剩下的兩個值不斷的從兩端向中間逼近。最後,將與目標相等的陣列壓入vector中。
ps:下面**也寫了詳細的注釋,不懂的時候,最好在草稿上面試一試每次計算的結果,可以更方便地理解程式。
程式
class solution
continue;
for (int j = i + 1, k = numbers.size() - 1; j < k;)
j++;
continue;
}if (k < numbers.size() - 1 && numbers[k] == numbers[k + 1])
k--;
continue;
}int target = 0;
int sum = numbers[i] + numbers[j] + numbers[k];
if (sum < target)//小於target就增加
j++;
else if (sum > target)//大於target就減少
k--;
else//等於target就存入result中,存了之後記得k++,j--
}} return result;
}};
15 三數之和(中等)
然後檢視其餘元素是否有兩數之和為val for int j i 1 j len j 如果陣列中存在三數之和為0 if map.containskey tmp nums i 和nums j 可以相等,因為他們是不同不同下標的元素 如果tmp在map中存在的數是nums j 則跳過 if nums j ...
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 class solu...
leetcode系列 演算法 中等 三數之和
雙指標先對陣列進行排序 快排 然後開始遍歷 先固定最左邊的乙個數字,假設下標為index 對固定數字的右半部分,使用雙指標遍歷,開始時的left index 1,right len nums 1 當前的三數之和sum nums index nums left nums right 然後進行如下判斷 ...