18. 4Sum
1. 问题描述
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] ]
Tags:Array Hash Table Two Pointers
Similar Problems: (E) Two Sum (M) 3Sum
2. 解答思路
3. 代码
1 #include <vector> 2 #include <map> 3 #include <algorithm> 4 #include <string> 5 using namespace std; 6 class Solution { 7 public: 8 vector<vector<int>> fourSum(vector<int>& nums, int target) { 9 vector<vector<int>> vResult; 10 if (!Validate(nums)) 11 { 12 return vResult; 13 } 14 std::map<std::string, bool> isExist;//用于存储已存在的四元组 15 int vSize = nums.size(); 16 std::sort(nums.begin(), nums.end()); 17 int Fir, Sec, Trd, Fou; 18 for (Fir=0; Fir<=vSize-4; Fir++) 19 { 20 int t1 = target - nums[Fir]; 21 for (Sec=Fir+1; Sec<=vSize-3; Sec++) 22 { 23 int t = t1 - nums[Sec]; 24 for (Trd=Sec+1, Fou=vSize-1; Trd<Fou;) 25 { 26 int sum = nums[Trd] + nums[Fou]; 27 if (sum < t) 28 { 29 Trd++; 30 } 31 else if (sum > t) 32 { 33 Fou--; 34 } 35 else 36 { 37 std::vector<int> vTemp; 38 vTemp.push_back(nums[Fir]); 39 vTemp.push_back(nums[Sec]); 40 vTemp.push_back(nums[Trd]); 41 vTemp.push_back(nums[Fou]); 42 43 char pBuf[100]; 44 sprintf(pBuf, "%d_%d_%d_%d", nums[Fir], nums[Sec], nums[Trd], nums[Fou]); 45 std::string str(pBuf); 46 if (0 == isExist.count(str)) 47 { 48 isExist.insert(std::make_pair(str, true)); 49 vResult.push_back(vTemp); 50 } 51 52 Trd++; 53 } 54 } 55 } 56 } 57 return vResult; 58 } 59 private: 60 bool Validate(vector<int>& nums) 61 { 62 if (nums.size() < 4) 63 { 64 return false; 65 } 66 return true; 67 } 68 };
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具