LeetCode 三數之和的多種可能(雙指標)

2021-09-25 02:31:32 字數 1565 閱讀 3558

給定乙個整數陣列 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 題目分析 有序陣...