首页 > 代码库 > 4Sum
4Sum
思路:需要返回vector中的值而不是index,所以先对vector排序,使用一个hashTable存储vector中两个数字的和,数据结构类型为unordered_map<int, vector<pair<int, int>>>,然后使用半夹逼计算,直接在hashTable中进行查找,这里用到pair的用法,其使用.first访问第一个元素,.second访问第二个元素,最后对结果进行排序,去除重复的元素,这是一个excited的操作,避免运算过程中重复数字的处理
class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int> > result; if(nums.size() < 4) return result; sort(nums.begin(), nums.end()); unordered_map<int, vector<pair<int, int> > >hashTable; for(int i=0; i<nums.size();++i) { for(int j=i+1; j<nums.size(); ++j) hashTable[nums[i] + nums[j]].push_back(pair<int, int>(i, j)); } int sum = 0; vector<pair<int, int>>index; for(int i=0; i<nums.size(); ++i) { for(int j=i+1; j<nums.size(); ++j) { sum = target - nums[i] - nums[j]; if(hashTable.find(sum) != hashTable.end()) { index = hashTable[sum]; for(int k=0; k<index.size(); ++k) { if(index[k].first > j && index[k].second > j) { result.push_back({nums[i], nums[j], nums[index[k].first], nums[index[k].second]}); } } } } } sort(result.begin(), result.end()); result.erase(unique(result.begin(), result.end()), result.end()); return result; } };
4Sum
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。