本文主要是介绍leetcode 练习题 --18. 四数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
给定一个包含 n 个整数的数组 nums
和一个目标值 target
,判断 nums
中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target
相等?找出所有满足条件且不重复的四元组。
注意:
答案中不可以包含重复的四元组。
示例:
给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为: [[-1, 0, 0, 1],[-2, -1, 1, 2],[-2, 0, 0, 2] ]
代码如下:
vector<vector<int>> fourSum(vector<int>& nums, int target)
{map<vector<int>,int>T;vector<vector<int>>res;if(nums.size()>=4){sort(nums.begin(),nums.end());for(int a=0; a<nums.size()-3; a++){if(nums[a]>0&&nums[a]>target)break;for(int b=a+1; b<nums.size()-2; b++){if(nums[b]>0&&nums[a]+nums[b]>target)break;for(int c=b+1; c<nums.size()-1; c++){if(nums[c]>0&&nums[a]+nums[b]+nums[c]>target)break;for(int d=c+1; d<nums.size(); d++){if(nums[d]>0&&nums[a]+nums[b]+nums[c]+nums[d]>target)break;if(nums[a]+nums[b]+nums[c]+nums[d]==target){vector<int>t;t.push_back(nums[a]);t.push_back(nums[b]);t.push_back(nums[c]);t.push_back(nums[d]);if(!T.count(t)){res.push_back(t);T[t]=1;}}}}}}}return res;
}
这篇关于leetcode 练习题 --18. 四数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!