18. 4Sum
来源:互联网 发布:广州凯申物流 知乎 编辑:程序博客网 时间:2024/05/22 01:38
18. 4Sum
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target ? Find all unique quadruplets in the array which gives the sum of target.
Note : The solution set must not contain duplicate quadruplets.
For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.
A solution set is :[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2]]
思路
对数组排序
确定四元数中的前两个(a,b)
遍历剩余数组确定两外两个(c,d),确定cd时思路跟3Sum确定后两个数据一样,二分查找左右逼近。
在去重时采用set集合
问题
第一次提交自己写的如下代码也会超时,主要原因是在每层循环的时候都调用nums.size()会造成很多的时间浪费,因为其是一个不变的值,所以应该初始化的时候直接把他付给一个整形变量,后面就不会再重复调用nums.size()了,降低时间复杂度
class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { set<vector<int>> res2; vector<vector<int>> res; sort(nums.begin(), nums.end()); int len = nums.size(); for (int i = 0;i<len-3;i++) { for (int j = i+1;j<len-2;j++) { int pre = j + 1; int tail = len - 1; while (pre < tail) { vector<int> tempRes; int sum = nums[i] + nums[j] + nums[pre] + nums[tail]; if (sum == target) { tempRes.push_back(nums[i]); tempRes.push_back(nums[j]); tempRes.push_back(nums[pre]); tempRes.push_back(nums[tail]); res2.insert(tempRes); pre++; tail--; } else if (sum < target) { pre++; } else tail--; } } } for (auto r : res2) { res.push_back(r); } return res; }};int main(){ vector<int> s = { -3,-2,-1,0,0,1,2,3 }; int target = 0; Solution3 ss; auto res = ss.fourSum(s, target); system("pause"); return 0;}
阅读全文
0 0
- 15. 3Sum 和 18. 4Sum
- LeetCode --- 18. 4Sum
- [Leetcode] 18. 4Sum
- 18. 4Sum
- 18. 4Sum
- 18. 4Sum
- 18. 4Sum
- 18. 4Sum
- 18. 4Sum
- leetcode 18. 4Sum
- 18. 4Sum
- 18. 4Sum
- 18. 4Sum
- 18. 4Sum LeetCode
- 18. 4Sum
- leetcode 18. 4Sum
- 18. 4Sum
- 18. 4Sum
- Python-多进程
- jQuery操作DOM
- 通过Object.prototype.toString.call()--判断数据(基本、引用)类型
- 设计模式--6个设计原则
- jQuery写返回顶部练习
- 18. 4Sum
- 大数据统计租房市场现状(上海篇)
- shell编程——if语句 if -z -n -f -eq -ne -lt
- Caffe2 Tutorials Overview(一)
- NETGEAR WNDR3800 刷机支持ipv6 部署本地git服务器
- Java+Selenium3方法篇18-获取当前页的源码
- TCP建立/关闭连接时握手过程中的状态情况
- Object-c的bool值的比较说明
- 装饰器学习