leetcode18. 4Sum
2017-11-04 23:48
274 查看
leetcode18. 4Sum
思路:
关键在于去重,再3sum和2sum中都应该主意去重
思路:
关键在于去重,再3sum和2sum中都应该主意去重
class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> result = {}; vector<int> temp = {}; vector<int> temp1 = {}; if(nums.size()<4){ return result; } sort(nums.begin(), nums.end()); for(int i=0;i<nums.size();i++){ for(int j=nums.size() - 1;j>i;j--){ int k=i,l=j; while(l>k){ temp = twoSum(nums, target - nums[i] - nums[j],k,l); if(temp.size()==4){ temp1 = {}; temp1.push_back(nums[i]);//cout<<temp[0]<<temp[1]<<temp[2]<<temp[3]<<endl; temp1.push_back(nums[j]); temp1.push_back(temp[0]); temp1.push_back(temp[1]); result.push_back(temp1); k=temp[2]; l=temp[3]; }else{ break; } while(nums[k] == nums[k+1] && l>k) k++; while(nums[l] == nums[l-1] && l>k) l--; } while(nums[j-1] == nums[j] && j>i) j--; } while(nums[i] == nums[i+1] && i<nums.size()) i++; } return result; } vector<int> twoSum(vector<int>& nums, int target,int i,int j) { if(j-i<=2){ return vector<int>(); } vector<int> numsCopy(nums.begin()+i+1,nums.begin()+j);//cout<<numsCopy<<endl; //numsCopy.erase(numsCopy.begin() + i); //numsCopy.erase(numsCopy.begin() + j-1); //copy(numsCopy.begin(), numsCopy.end(), ostream_iterator<int>(cout, ""));cout<<endl; vector<int>::iterator iter = numsCopy.begin(); vector<int>::iterator iter_end = numsCopy.end(); iter_end--; while (iter != iter_end && (*iter + *iter_end) != target) { //cout << *iter << endl; if (*iter + *iter_end < target) { ++iter; } else if (*iter + *iter_end > target) { iter_end--; } else { break; } } vector<int> ret = {}; if(iter == iter_end){ return ret; } ret.push_back(*iter); ret.push_back(*iter_end); ret.push_back(iter - numsCopy.begin() +i+1); ret.push_back(iter_end - numsCopy.begin() +i+1); return ret; } };
相关文章推荐
- Leetcode刷题记——18. 4Sum(4个数字和)
- C#解leetcode 18. 4Sum
- Leetcode18. 4Sum
- Leetcode1.Two Sum+LeetCode15.3Sum+LeetCode18. 4Sum【K-Sum问题】
- leetcode18. 4Sum
- leetcode解题报告18. 4Sum
- [leetcode]Path Sum II
- 【leetcode】Minimum Size Subarray Sum
- leetcode---Path Sum II---回溯
- leetcode (15) - 3sum
- leetcode--Sum Root to Leaf Numbers
- 【leetcode c++】113 Path Sum II
- 【leetcode刷题笔记】Sum Root to Leaf Numbers
- [LeetCode] Path Sum II 解题报告
- [LeetCode]124 Binary Tree Maximum Path Sum
- LeetCode (1)Two Sum | LeetCode
- LeetCode OJ Combination Sum
- LeetCode—**Combination Sum 利用DFS算法
- LeetCode OJ Minimum Path Sum
- LeetCode113. Path Sum II