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: Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d) 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)
题意:
找寻一个数组中满足条件的一组元素,条件为4个数的和值为0。 上面有样例,要求1.返回一组元素中不能反复。2.每一个元素的4个值必须是有序的比方(-1, 0, 0, 1)。a <= b <= c <=d。
思路:
先对给定数组做初始化,把全部两两值的和求出来,我们就把求4Sum变为求2Sum了。注意初始化的时候求两两和值也要保存两个数字的下标,题中我用的是multimap <int, pair < int, int > >
,由于可能会有反复的所以要用multimap, multimap第一个int是表示和值。第二个pair是两个数的下标,并且用multimap我们默认是排序的,刚好初始化完直接用首和尾指针查找满足2Sum为0的数能够了。下标我们都记录着。所以非常easy得到原先的4个值。 找到4个值后我们把它保存在set中,这样也满足题意的要求返回值是有序的。
代码:
#include #include #include #include #include
測试结果:
第一组
第二组