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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

15.Three Sum

發(fā)布時(shí)間:2025/4/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 15.Three Sum 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
思路
  • 直接暴力,\(O(n^4 log(n))\),不出意外的超時(shí)了。。
class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;int i,j,k;int len = nums.size();for(i = 0; i < len; i++){for(j = i+1; j < len; j++){for(k = j+1; k < len; k++){if(nums[i]+nums[j]+nums[k] == 0){vector<int> inRes;inRes.push_back(nums[i]);inRes.push_back(nums[j]);inRes.push_back(nums[k]);bool ok = true;for(int m = 0; m < res.size(); m++){if(issame(inRes,res[m])){ ok = false;continue;}}if(ok) res.push_back(inRes);}}}}return res;}bool issame(vector<int> a,vector<int> b){if(a.size() != b.size()) return false;sort(begin(a),end(a));sort(begin(b),end(b));bool ok = true;for(int i = 0; i < a.size(); i++){if(a[i] != b[i]){ok = false;}}return ok;} };
  • 利用map暴力,時(shí)間復(fù)雜度 \(O(n^3 log(n))\),依然超時(shí)。。
class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;map<int,int> tmp;int i,j,k;int len = nums.size();for(i = 0; i < len; i++){tmp[nums[i]] = i;}for(i = 0; i < len; i++){for(j = i+1; j < len; j++){vector<int> inRes = {};if(tmp.find(-(nums[i]+nums[j])) != tmp.end() && tmp[-(nums[i]+nums[j])] != i && tmp[-(nums[i]+nums[j])] != j){inRes.push_back(nums[i]);inRes.push_back(nums[j]);inRes.push_back(-(nums[i]+nums[j])); bool ok = true;for(int m = 0; m < res.size(); m++){if(issame(inRes,res[m])) ok = false; }if(ok){res.push_back(inRes);}}}}return res; }bool issame(vector<int> a,vector<int> b){if(a.size() != b.size()) return false;sort(begin(a),end(a));sort(begin(b),end(b));bool ok = true;for(int i = 0; i < a.size(); i++){if(a[i] != b[i]){ok = false;}}return ok;} };
  • 利用3個(gè)指針,首先固定一個(gè),然后類似于Two Sum問題。(這里是用map存儲(chǔ)返回結(jié)果的,需要避免重復(fù)的問題,而直接用set存儲(chǔ)就方便許多了),復(fù)雜度為 \(O(n^2)\),如果用set的話,復(fù)雜度應(yīng)該是 \(O(n^3)\)
class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {int i,lo,hi;int len = nums.size();sort(nums.begin(), nums.end());vector<vector<int>> res;for(int i = 0; i < len-2; i++){int lo = i+1,hi = len-1;int sum = -nums[i];if(i == 0 || (nums[i] != nums[i-1] && i > 0)){while(lo < hi){if((nums[lo] + nums[hi]) == sum){vector<int> tmp;tmp.push_back(nums[i]);tmp.push_back(nums[lo]);tmp.push_back(nums[hi]);cout << tmp[0] << " " << tmp[1] <<" " << tmp[2] << endl;res.push_back(tmp);while(lo < hi && nums[lo] == nums[lo+1]){lo++;}while(lo < hi && nums[hi] == nums[hi-1]){hi--;}lo++;hi--;}else if ((nums[lo]+nums[hi]) < sum){lo++;}else hi--;}}}return res;} };

轉(zhuǎn)載于:https://www.cnblogs.com/UniMilky/p/6951664.html

總結(jié)

以上是生活随笔為你收集整理的15.Three Sum的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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