• LeetCode


     18. 4Sum

    Problem's Link

     ----------------------------------------------------------------------------

    Mean: 

    给定一个数列和一个目标数,找出所有和为目标数的四元组.

    analyse:

    和3Sum差不多,多加了一个循环而已.

    Time complexity: O(N^3)

     

    view code

    /**
    * -----------------------------------------------------------------
    * Copyright (c) 2016 crazyacking.All rights reserved.
    * -----------------------------------------------------------------
    *       Author: crazyacking
    *       Date  : 2016-02-17-13.10
    */
    #include <queue>
    #include <cstdio>
    #include <set>
    #include <string>
    #include <stack>
    #include <cmath>
    #include <climits>
    #include <map>
    #include <cstdlib>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    typedef long long(LL);
    typedef unsigned long long(ULL);
    const double eps(1e-8);

    class Solution
    {
    public:
       vector<vector<int>> fourSum(vector<int>& nums, int target)
       {
           vector<vector<int>> res;
           int si=nums.size();
           if(si<4) return res;
           std::sort(nums.begin(),nums.end());
           int target_3,target_2;
           int low,high;
           for(int i=0;i<si;++i)
           {
               target_3=target-nums[i];
               for(int j=i+1;j<si;++j)
               {
                   target_2=target_3-nums[j];
                   low=j+1;
                   high=si-1;
                   while(low<high)
                   {
                       int two_sum=nums[low]+nums[high];
                       if(two_sum<target_2)
                           ++low;
                       else if(two_sum>target_2)
                           --high;
                       else
                       {
                           vector<int> quadruplet(4,0);
                           quadruplet[0]=nums[i];
                           quadruplet[1]=nums[j];
                           quadruplet[2]=nums[low];
                           quadruplet[3]=nums[high];
                           res.push_back(quadruplet);
                           while(low<high && nums[low]==quadruplet[2]) ++low;
                           while(low<high && nums[high]==quadruplet[3]) --high;
                       }
                   }
                   while(j+1<si && nums[j+1]==nums[j]) ++j;
               }
               while(i+1<si && nums[i+1]==nums[i]) ++i;
           }
           return res;
       }
    };

    int main()
    {
       Solution solution;
       int n,target;
       while(cin>>n>>target)
       {
           vector<int> ve;
           for(int i=0;i<n;++i)
           {
               int tmp;
               cin>>tmp;
               ve.push_back(tmp);
           }
           auto ans=solution.fourSum(ve,target);
           for(auto p1:ans)
           {
               for(auto p2:p1)
                   cout<<p2<<" ";
               cout<<endl;
           }
       }
       return 0;
    }
    /*

    */
  • 相关阅读:
    iscsi序列一、搭建iscsi存储系统
    LVS系列三、LVS集群-IP-TUN模式
    LVS系列二、LVS集群-DR模式
    LVS系列一、LVS集群-NAT模式
    LINUX 的网站压力测试工具 webbench
    关于 /proc/sys/net/ipv4/下 文件的详细解释
    CentOS7+rsync+sersync实现数据实时同步
    Linux Shell 自动备份脚本
    Vim的强大配置文件
    nginx出现403 Forbidden解决方法
  • 原文地址:https://www.cnblogs.com/crazyacking/p/5195103.html
Copyright © 2020-2023  润新知