标签:target hashtable pre ble int ase 思路 结构 result
思路:需要返回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; } };
标签:target hashtable pre ble int ase 思路 结构 result
原文地址:http://www.cnblogs.com/chengyuz/p/6536668.html