日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode--923. 三数之和的多种可能

發布時間:2024/7/19 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode--923. 三数之和的多种可能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

給定一個整數數組?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 種情況。

思路:三指針法

特殊之處在于相同數字也算不同的個數,所以每次需要判斷有沒有相同組成的數組之和也等于target

情況一:nums[start]與nums[end]不一樣,例如示例一,1,2,5時,i=0時,通過判斷,2出現2次,5出現2次,所以2*2=4次

情況二:nums[start]與nums[end]一樣,例如示例二,1,2,2時,i=0時,后面4個2,選擇兩個即可,所以是4*3/2=6種

提示:

3 <= A.length <= 3000
0 <= A[i] <= 100
0 <= target <= 300

提交的代碼:

class?Solution?{

????public?int?threeSumMulti(int[]?nums,?int?target)?{

?????????Arrays.sort(nums);

???????int?i,start=1,end=nums.length-1,sum=0,a,b,c,t;

???????for(i=0;i<nums.length-2;i++)

???????{

???????????a=0;

???????????b=0;

???????????c=0;

???????????start=i+1;

???????????end=nums.length-1;

???????????while(start<end)

???????????{

????????????????a=0;

???????????????b=0;

???????????????c=0;

???????????????if(nums[i]+nums[start]+nums[end]>target)

???????????????{

???????????????????end--;

???????????????}

???????????????else?if(nums[i]+nums[start]+nums[end]<target)

???????????????{

???????????????????start++;

???????????????}

???????????????else

???????????????{

???????????????????while(nums[start]==nums[start+1]&&start+1!=end)

???????????????????{

???????????????????????if(nums[start]==nums[end])

???????????????????????{

???????????????????????????c++;

???????????????????????}

???????????????????????start++;

???????????????????????a++;

??????????????????????

???????????????????}

???????????????????while(nums[end]==nums[end-1]&&end-1!=start)

???????????????????{

???????????????????????end--;

???????????????????????b++;

???????????????????????

???????????????????}

???????????????????if(a==0&&b==0)

???????????????????{

???????????????????????sum++;

???????????????????}

???????????????????else{

???????????????????????if(nums[start]!=nums[end])

???????????????????????{

???????????????????????????sum=?sum+(a+1)*(b+1);

???????????????????????}

???????????????????????else

???????????????????????{

???????????????????????????c+=2;

???????????????????????????t?=?c*(c-1)/2;

???????????????????????????sum+=t;

???????????????????????}

???????????????????}

???????????????????sum=sum%1000000007;

???????????????????start++;

???????????????????end--;

???????????????}

???????????}

???????}

???????return?sum;

????}

}

總結

以上是生活随笔為你收集整理的Leetcode--923. 三数之和的多种可能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。