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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

力扣四数之和

發(fā)布時間:2024/4/11 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 力扣四数之和 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

力扣四數(shù)之和

文章目錄

  • 力扣四數(shù)之和
    • 一、題目描述
    • 二、分析
    • 三、代碼
    • 四、問題描述
    • 五、分析
    • 六、代碼
    • 七、100Sum 問題?

一、題目描述

二、分析

這道題和:三數(shù)之和:三數(shù)之和類似,直接放代碼:

三、代碼

class Solution { public:// 只需要返回三個數(shù)的和,根據(jù)15的雙指針來改int threeSumClosest(vector<int>& nums, int target) {int n = nums.size();if( n < 3 )return NULL;if( n == 3 )return nums[0]+nums[1] + nums[2];// 仍然需要重排sort( nums.begin(), nums.end() );int minMerge = INT_MAX;int ans = 0;int tmpSum = 0;for( int first = 0; first < n; first++ ){int second = first + 1;int third = n - 1;while( second < third ){tmpSum = nums[first] + nums[second] + nums[third];// 如果當(dāng)前距離小于目前最小距離,則需要更新if( abs(tmpSum - target) < minMerge ){ minMerge = abs( tmpSum - target );ans = tmpSum;}// 然后決定下一步怎么走if( tmpSum < target ){ // 首先,tmpSum < target說明右側(cè)可能有更好的結(jié)果,必須是像右側(cè)走,second++second++;}else if (tmpSum > target){third--;}else{ // 如果已經(jīng)相等,那么間隔就是0return ans;}}}return ans;} };

四、問題描述

五、分析

原理和三數(shù)之和完全一樣

六、代碼

class Solution{public: vector<vector<int>> fourSum(vector<int>& nums, int target) {sort(nums.begin(),nums.end());vector<vector<int> > res;if(nums.size() < 4)return res;int a,b,c,d,_size=nums.size();for(a = 0;a <= _size - 4;a++){if(a > 0 && nums[a] == nums[a - 1]) continue; //確保nums[a] 改變了for(b = a + 1;b <= _size - 3;b++){if(b > a + 1 && nums[b] == nums[b - 1])continue; //確保nums[b] 改變了c = b + 1,d = _size - 1;while(c < d){if(nums[a] + nums[b] + nums[c] + nums[d] < target)c++;else if(nums[a] + nums[b] + nums[c] + nums[d] > target)d--;else{res.push_back({nums[a],nums[b],nums[c],nums[d]});while(c < d && nums[c + 1] == nums[c]) //確保nums[c] 改變了c++;while(c <d && nums[ d - 1] == nums[d]) //確保nums[d] 改變了d--;c++;d--;}}}}return res;} };

七、100Sum 問題?

  • 在 LeetCode 上,4Sum 就到頭了,但是回想剛才寫 3Sum 和 4Sum的過程,實際上是遵循相同的模式的。我相信你只要稍微修改一下 4Sum 的函數(shù)就可以復(fù)用并解決 5Sum 問題,然后解決 6Sum問題……
  • 那么,如果我讓你求 100Sum 問題,怎么辦呢?其實我們可以觀察上面這些解法,統(tǒng)一出一個 nSum 函數(shù):
/* 注意:調(diào)用這個函數(shù)之前一定要先給 nums 排序 */ vector<vector<int>> nSumTarget(vector<int>& nums, int n, int start, int target) {int sz = nums.size();vector<vector<int>> res;// 至少是 2Sum,且數(shù)組大小不應(yīng)該小于 nif (n < 2 || sz < n) return res;// 2Sum 是 base caseif (n == 2) {// 雙指針那一套操作int lo = start, hi = sz - 1;while (lo < hi) {int sum = nums[lo] + nums[hi];int left = nums[lo], right = nums[hi];if (sum < target) {//去掉重復(fù)的結(jié)果while (lo < hi && nums[lo] == left) lo++;} else if (sum > target) {//去掉重復(fù)的結(jié)果while (lo < hi && nums[hi] == right) hi--;} else {res.push_back({left, right});while (lo < hi && nums[lo] == left) lo++;while (lo < hi && nums[hi] == right) hi--;}}} else {// n > 2 時,遞歸計算 (n-1)Sum 的結(jié)果for (int i = start; i < sz; i++) {vector<vector<int>> sub = nSumTarget(nums, n - 1, i + 1, target - nums[i]);for (vector<int>& arr : sub) {// (n-1)Sum 加上 nums[i] 就是 nSumarr.push_back(nums[i]);res.push_back(arr);}while (i < sz - 1 && nums[i] == nums[i + 1]) i++;}}return res; }
  • 嗯,看起來很長,實際上就是把之前的題目解法合并起來了,n == 2 時是 twoSum 的雙指針解法,n > 2時就是窮舉第一個數(shù)字,然后遞歸調(diào)用計算 (n-1)Sum,組裝答案。
  • 需要注意的是,調(diào)用這個 nSum 函數(shù)之前一定要先給 nums 數(shù)組排序,因為 nSum 是一個遞歸函數(shù),如果在 nSum 函數(shù)里調(diào)用排序函數(shù),那么每次遞歸都會進行沒有必要的排序,效率會非常低。
  • 比如說現(xiàn)在我們寫 LeetCode 上的 4Sum 問題:
vector<vector<int>> fourSum(vector<int>& nums, int target) {sort(nums.begin(), nums.end());// n 為 4,從 nums[0] 開始計算和為 target 的四元組return nSumTarget(nums, 4, 0, target); }
  • 再比如 LeetCode 的 3Sum 問題,找 target == 0 的三元組:
vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(), nums.end());// n 為 3,從 nums[0] 開始計算和為 0 的三元組return nSumTarget(nums, 3, 0, 0); }

那么,如果讓你計算 100Sum 問題,直接調(diào)用這個函數(shù)就完事兒了。

總結(jié)

以上是生活随笔為你收集整理的力扣四数之和的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 加勒比精品| a视频免费在线观看 | av小次郎收藏 | 天堂中文在线看 | av在线综合网 | 男女野外做受全过程 | 久久精品国产一区二区三区 | 亚洲AV无码精品一区二区三区 | 黑人一级视频 | 91精产国品一二三区在线观看 | 日韩淫| 成人中文网 | 91麻豆精品国产91久久久无需广告 | 一区二区三区四区精品视频 | 国产精品久久久一区二区 | 久久午夜视频 | 亚洲人屁股眼子交1 | 婷婷亚洲五月 | 亚洲色图视频在线 | 久久精品www人人爽人人 | 日韩欧美中文在线 | 天天干天天舔天天操 | 精品成人av一区二区三区 | av黄色免费| 亚洲福利视频在线 | 公侵犯人妻一区二区 | 污污网站免费在线观看 | 丰满少妇被猛烈进入一区二区 | av网站在线免费观看 | 国产精品一区二区三区免费观看 | 欧美色图激情小说 | 国产乱淫a∨片免费视频 | 五月婷婷开心 | 欧洲成人综合 | 日韩欧美一区二区一幕 | 哪里可以免费看av | 免费se99se | 国产67194| 免费观看在线高清 | 国产男女自拍 | 午夜tv影院 | 黄色国产在线观看 | 精品国产九九 | 中日黄色片 | 成人黄色动漫在线观看 | 韩国av在线 | 久久久久久久av | 精品无码人妻一区二区三区品 | 2025av在线播放 | av网站大全在线观看 | 一区二区三区韩国 | 69国产精品 | 娇妻高潮浓精白浆xxⅹ | 成人毛片基地 | 国产成人精品视频ⅴa片软件竹菊 | 国产成人精品无码免费看在线 | 国产1区在线观看 | 强行挺进皇后紧窄湿润小说 | 国产精品999.| 欧美成人极品 | 美女黄色小视频 | 99热这里只有精品66 | 亚洲成人一区 | 国产一区二区三区乱码 | 日韩性猛交ⅹxxx乱大交 | 日本免费在线 | 男人天堂电影 | 青娱乐毛片 | 成人影视网址 | 黄瓜视频在线观看 | 91综合在线 | 国产精品一区二区无码免费看片 | 伊人91在线 | 香蕉成视频人app下载安装 | chinese精品自拍hd| 久久99一区二区 | 黄色不卡 | 岛国av一区二区三区 | 91看片在线观看 | 夜夜嗨av禁果av粉嫩avhd | 一区二区三区高清在线观看 | 国产乱人 | wwwwxxxxx日本 | 免费特黄视频 | 99久久九九 | 欧美影院在线 | 日韩欧美在线播放 | 欧美黄色a视频 | 激情狠狠 | 一区二区av电影 | jizz国产在线| 男人的天堂狠狠干 | 午夜私人影院 | 日韩中文字幕av在线 | 青草草在线视频 | 亚洲av无码国产精品久久 | 欧美日韩国产高清视频 | 国产精品啪啪啪视频 | 好吊色网站 |