題解 三數之和的多種可能 923

2021-08-31 19:08:27 字數 1778 閱讀 4063

給定乙個整數陣列a,以及乙個整數target作為目標值,返回滿足i < j < ka[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 <= 30000 <= a[i] <= 1000 <= target <= 300

這道題剛開始我用的是遍歷,但是會超時,加進去了條件判斷跳出等優化也不行,只好再想辦法

然後我又想到了用雜湊來儲存,畢竟a[i]<=100,用了雜湊之後分析了一下條件

把所有可能都列一下

題目要求x= 2 // i=j 有兩個以上的j

((b(i) * (b(i)-1)) / 2) * b(k)

b(i) < 2 // i=j 但是只有乙個i

0i != j == k

b(j) >= 2 // j=k 有兩個以上的j

((b(j) * (b(j)-1)) / 2) * b(i)

b(j) < 2 // j=k 但是只有乙個j

0i != j != k //三個數不同

b(i) * b(j) * b(k)

i + j + k != target // 不等於target

03 * i == target //三個相同數的和等於target

b(i) >= 3 //有三個以上相同的數

b(i) * (b(i)-1) * (b(i) -2) / (3 * 2 * 1)

b(i) < 3 //相同數小於三個

0

列條件的時候覺得條件很多,如果一條條列出來的話會很麻煩,但是列出來之後發現有許多可以合併的條件,比如i==j!=k的兩種情況就可以合併,因為當b(i)<2時,b(i)=1,b(i)-1=0,表示式的值為0,所以將可以合併的判斷合併之後就會只剩下四個,但是再一分析發現,i=j!=k和i!=j=k其實是乙個條件,只不過i,j,k的取值不同,但是只用乙個判斷條件的話後面也能判斷到另乙個條件,所以最終合併之後會只有三個條件。分別是i=j=k,i=j!=k,i!=j!=k,然後寫出**

object solution }}

}(result % 1000000007).toint

}}

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...

演算法題 三數之和的多種可能

演算法題 三數之和的多種可能 這是本人第一次寫部落格,之前總結一些內容都是使用印象筆記,後來覺得筆記這個東西自己記了有的時候很久才會去看,可能根本不會回去再看,索性把自己積累知識的過程寫成blog,這樣你們也可以借鑑參考,何樂而不為呢!給定乙個整數陣列 a,以及乙個整數 target 作為目標值,返...

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

給定乙個整數陣列 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...