LeetCode 18. 4Sum
来源:互联网 发布:口腔医学网络教育 编辑:程序博客网 时间:2024/06/05 10:35
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]]
题目大意:
给定一个数组nums和一个数字target,找出nums中4个数的和为target的所有情况。注意不能有重复情况。
《3Sum》是通过固定第一个数字,然后用两个指针。
那么《4Sum》我们可以固定第一第二个数字(通过两层循环实现),然后用两个指针。
没做过《3Sum》建议先做一下。点击打开链接
题目代码:
class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>>ans; int l,r; if(nums.size() < 4) return ans; sort(nums.begin(), nums.end()); for(int i = 0; i < nums.size()-3; i++){ if(i && nums[i] == nums[i-1]) continue; for(int j = i+1; j < nums.size()-2; j++){ if(j>i+1 && nums[j] == nums[j-1]) continue; l = j+1; r = nums.size()-1; while(l < r){ int sum = nums[i]+nums[j]+nums[l]+nums[r]; if(sum == target){ ans.push_back({nums[i],nums[j],nums[l],nums[r]}); while(l < r && nums[l+1] == nums[l]) l++; while(l < r && nums[r-1] == nums[r]) r--; l++; r--; }else if(sum < target){ l++; }else{ r--; } } } } return ans; }};
阅读全文
1 0
- LeetCode --- 18. 4Sum
- [Leetcode] 18. 4Sum
- leetcode 18. 4Sum
- 18. 4Sum LeetCode
- leetcode 18. 4Sum
- 【LeetCode】18. 4Sum
- LeetCode - 18. 4Sum
- leetcode 18. 4Sum
- Leetcode 18. 4Sum
- LeetCode 18. 4Sum
- 【leetcode】18. 4Sum
- leetcode 18. 4Sum
- [leetcode]18. 4Sum
- leetcode 18. 4Sum
- leetcode 18. 4Sum
- leetcode 18. 4Sum
- [LeetCode] 18. 4Sum
- LeetCode 18. 4Sum
- 吴恩达【深度学习工程师】学习笔记(一)
- spring mvc生成json
- 正则表达式
- 查看nginx配置文件目录
- C#梳理【可空类型Nullable】
- LeetCode 18. 4Sum
- ArrayList源码学习(1.1)
- Thymeleaf教程 (八) 模板布局(thymeleaf的主要技术优势)
- blktrace
- 静态代码块、构造代码块、构造函数
- 逆光 (摄影术语)
- 采用python进行Android的多渠道打包
- so就 (二分答案 dp 贪心)
- 阿里云视频点播解决方案使用教程