设为首页 加入收藏

TOP

#leetcode刷题之路18-四数之和
2019-03-12 18:09:16 】 浏览:40
Tags:#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]
]

思路:暴力解法,暂时只对最后一个数做优化

#include <iostream>
#include<vector>
#include <algorithm>
#include <set>
using namespace std;
vector<vector<int>> fourSum(vector<int>& nums, int target) {
    vector<vector<int>> ans;
    set<vector<int>> t;
    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++
		    
 
			
>) {
for(int k=j+1;k<len-1;k++) { for(int h=k+1;h<len;h++) { while ((h+1)<len&&nums[h]==nums[h+1]) h++; if((nums[i]+nums[j]+nums[k]+nums[h])==target) { vector<int> temp; temp.push_back(nums[i]); temp.push_back(nums[j]); temp.push_back(nums[k]); temp.push_back(nums[h]); int tt=t.size(); t.insert(temp); if(tt!=t.size()) ans.push_back(temp); } } } } } return ans; } int main() { vector<int> a={1,0,-1,0,-2,2}; int target=0; vector<vector<int>> ans=fourSum(a,target); cout<<ans.size()<<endl; return 0; }

 

 

 

 


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于二维数组的小技巧(未完待续) 下一篇ubuntu环境下实现 多线程的socket..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(217) }