【LeetCode】18. 4Sum
来源:互联网 发布:果壳网和知乎 编辑:程序博客网 时间:2024/06/04 11:20
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]]
解题思路
双指针问题。
思路还是与3Sum问题相似。差异在于,此处是依次固定第一和第二个数字,然后通过双指针移动控制第三和第四个数字;而3Sum则只需固定第一个数字。
注意:要仔细分析所有while循环的控制条件,防止出现死循环。
AC代码
class Solution {public: vector<vector<int> > fourSum(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); vector<vector<int> > ans; const int vSize = nums.size(); //fix the first number for (int first = 0; first < vSize - 3; ++first) { //fix the second number for (int second = first + 1; second < vSize - 2; ++second) { int third = second + 1; int forth = vSize - 1; while (third < forth) { int curSum = nums[first] + nums[second] + nums[third] + nums[forth]; if (curSum < target) third++; else if (curSum > target) forth--; else { vector<int> tempAns; //注意此处push_back的是数值nums[first],而非下标first tempAns.push_back(nums[first]); tempAns.push_back(nums[second]); tempAns.push_back(nums[third]); tempAns.push_back(nums[forth]); ans.push_back(tempAns); //此处不可以直接写nums[third+1]==nums[third] //因为要确保third一定会被更新到 while (third < forth && nums[third] == tempAns[2]) third++; while (third < forth && nums[forth] == tempAns[3]) forth--; } } while (second < vSize - 1 && nums[second + 1] == nums[second]) second++; } while (first < vSize - 1 && nums[first + 1] == nums[first]) first++; } return ans; }};
0 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
- iOS开发笔记
- 极光推送demo
- windows下zookeeper伪集群搭建
- L2-004. 这是二叉搜索树吗?
- 每天一个 Linux 命令(37):date命令
- 【LeetCode】18. 4Sum
- C# 中GUID生成格式的四种格式
- 26. Remove Duplicates from Sorted Array
- UNIX网络编程卷一 第三章 地址定义及相关函数
- C#递归调用
- Verilog基本模型(Basic Modelling)
- PHP中表单没有问题但是$_FILES为空的解决办法
- 简单的canvas动画原理
- html5