18 4Sum((寻找四个数之和为指定数的集合Medium))

题目意思:给一个乱序数组,在里面寻找三个数之和为target的所有情况,这些情况不能重复,增序排列

思路:采用3Sum的做法

   ps:有见一种用hash的,存任意两个元素的和,然后变成3sum问题,需要判断重复

   图书馆的网,已经到了令人发指的程度,我告诫自己千万不要暴躁。

 1 class Solution {
 2 public:
 3     vector<vector<int>> fourSum(vector<int>& nums, int target) {
 4         vector<vector<int>> ans;
 5         vector<int> vec(4);
 6         int k,l,temp;
 7         sort(nums.begin(),nums.end());
 8         for(int i=0;i<nums.size();++i){
 9             if(i>0&&nums[i]==nums[i-1])continue;
10             for(int j=i+1;j<nums.size();++j){
11                 if(j>i+1&&nums[j]==nums[j-1])continue;
12                     k=j+1;
13                     l=nums.size()-1;
14                     while(k<l){
15                         if(k>j+1&&nums[k]==nums[k-1]){
16                             ++k;
17                             continue;
18                         }
19                         temp=nums[i]+nums[j]+nums[k]+nums[l];
20                         if(temp>target)--l;
21                         else if(temp<target)++k;
22                         else{
23                             vec[0]=nums[i];
24                             vec[1]=nums[j];
25                             vec[2]=nums[k];
26                             vec[3]=nums[l];
27                             ans.push_back(vec);
28                             --l;
29                             ++k;
30                         }
31                     }
32             }
33         }
34         return ans;
35     }
36 };
时间: 2024-10-07 18:49:19

18 4Sum((寻找四个数之和为指定数的集合Medium))的相关文章

15 3Sum(寻找三个数之和为指定数的集合Medium)

题目意思:给一个乱序数组,在里面寻找三个数之和为0的所有情况,这些情况不能重复,增序排列 思路:前面2sum,我用的是map,自然那道题map比双指针效率高,这道题需要先排序,再给三个指针,i.j.k 对于i指针从前往后遍历,对于一个固定的i指针,其实就是2Sum的情况,给定一前一后两个指针进行遍历, 值大了,就把后面的指针往前移,值小了就把前面的指针往后移. 比较麻烦的地方在于去重,首先是i指针的去重,j和k只用一个去重就可以了 ps:这是数组中一种十分常用的方法. 1 class Solut

lintcode 中等题:4 Sum 四个数之和

题目 四数之和 给一个包含n个数的整数数组S,在S中找到所有使得和为给定整数target的四元组(a, b, c, d). 样例 例如,对于给定的整数数组S=[1, 0, -1, 0, -2, 2] 和 target=0. 满足要求的四元组集合为: (-1, 0, 0, 1) (-2, -1, 1, 2) (-2, 0, 0, 2) 注意 四元组(a, b, c, d)中,需要满足a <= b <= c <= d 答案中不可以包含重复的四元组. 解题 怎么感觉下面程序已经没法修改了但是在

LeetCode 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 exampl

LeetCode 18 4Sum(4个数的和)

翻译 给定一个有n个数字的数组S,在S中是否存在元素a,b,c和d的和恰好满足a + b + c + d = target. 找出数组中所有的不想等的这四个元素,其和等于target. 备注: 在(a,b,c,d)中的元素必须从小到大排列.(a ≤ b ≤ c ≤ d) 其结果必须不能够重复. 例如,给定S = {1 0 -1 0 -2 2},target = 0. 一个结果集为: (-1, 0, 0, 1) (-2, -1, 1, 2) (-2, 0, 0, 2) 原文 Given an ar

编程之美之高速寻找多个数满足给定条件

一.寻找三个数之和等于给定值 分析:方法类似与2Sum.就是先对数组进行排序,时间复杂度为O(nlogn),然后固定一个数,用两个指针进行遍历,找到三个数之和等于给定的值就可以,时间复杂度为O(n^2).详细可提交于leetcode:https://oj.leetcode.com/problems/3sum/,代码例如以下: vector<vector<int> > threeSum(vector<int> &num,int target){ vector<

LeetCode:18. 4Sum(Medium)

1. 原题链接 https://leetcode.com/problems/4sum/description/ 2. 题目要求 给出整数数组S[n],在数组S中是否存在a,b,c,d四个整数,使得四个数之和等于目标整数target.请找出所有满足此条件的四个整数. 3. 解题思路 先对nums进行排序,然后采用两层for循环来确定前两个数字,最后在第二层for循环中确定后两个数字. 注意可能存在重复解!! 如下图所示,对Input先进行排序:[-4, -1, -1,0, 1,2],target

[LeetCode] 454. 4Sum II 四数之和II

Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are such that A[i] + B[j] + C[k] + D[l] is zero. To make problem a bit easier, all A, B, C, D have same length of N where 0 ≤ N ≤ 500. All integers are in the r

[LeetCode] 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 exampl

1. Two Sum&amp;&amp;15. 3Sum&amp;&amp;18. 4Sum

题目: 1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. Given nums = [2, 7, 1