給定乙個整數陣列 a,以及乙個整數 target 作為目標值,返回滿足 i < j < k 且 a[i] + a[j] + a[k] == target 的元組 i, j, k 的數量。
由於結果會非常大,請返回 結果除以 10^9 + 7 的餘數。
示例 1:
輸入:a = [1,1,2,2,3,3,4,4,5,5], target = 8
輸出:20
解釋:按值列舉(a[i],a[j],a[k]):
(1, 2, 5) 出現 8 次;
(1, 3, 4) 出現 8 次;
(2, 2, 4) 出現 2 次;
(2, 3, 3) 出現 2 次。
示例 2:
輸入:a = [1,1,2,2,2,2], target = 5
輸出:12
解釋:a[i] = 1,a[j] = a[k] = 2 出現 12 次:
我們從 [1,1] 中選擇乙個 1,有 2 種情況,
從 [2,2,2,2] 中選出兩個 2,有 6 種情況。
3 <= a.length <= 3000
0 <= a[i] <= 100
0 <= target <= 300
思路分
析:\color思路分析:
思路分析
:這種類似排列組合的問題肯定會有很多道友直接上蠻力法,三層迴圈,時間複雜度在o(n3)級別,然而這種題一般測試資料量都比較大,所以還是盡量避開用蠻力法。
前面有一系列的「兩數之和」、「三數之和」等等這種題目 leetcode 兩數之和系列,這道題也是類似的處理方法。
為了降低複雜度,我們首先對陣列進行排序,排序之後我們使用thirdptr指標作為三個數中最大的數,然後使用firstptr、secondptr指標在thirdptr的左邊掃瞄剩下的兩個數,並且保持firstptr < secondptr,這樣滿足firstptr < secondptr < thirdptr,防止重複計算。
class
solution
for(
int i = asize -
1; i >=0;
--i)
//thirdptr從後往前掃瞄,固定三個數的右邊界
LeetCode923 三數之和的多種可能
給定乙個整數陣列 a,以及乙個整數 target 作為目標值,返回滿足 i j k 且 a i a j a k target 的元組 i,j,k 的數量。由於結果會非常大,請返回 結果除以 10 9 7 的餘數。示例 1 輸入 a 1,1,2,2,3,3,4,4,5,5 target 8 輸出 20...
leetcode 三數之和
給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 因為這次是要求輸出對應的三...
LeetCode 三數之和
題目描述 給定乙個包含 n 個整數的陣列nums,判斷nums中是否存在三個元素 a,b,c 使得 a b c 0 找出所有滿足條件且不重複的三元組。注意 答案中不可以包含重複的三元組。例如,給定陣列 nums 1,0,1,2,1,4 滿足要求的三元組集合為 1,0,1 1,1,2 題目分析 有序陣...