博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode #18 4Sum (M)
阅读量:5209 次
发布时间:2019-06-14

本文共 1716 字,大约阅读时间需要 5 分钟。

[Problem]

Given an array S of n integers, are there elements abc, 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)

[Analysis]

思路与3Sum一样。事实上NSum问题都可以递归到2Sum然后以O(n^(N-1))复杂度解决,有兴趣还可以进一步用分治法优化(两两解决2Sum问题并merge)。

 

[Solution]

import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Solution {    public List
> fourSum(int[] num, int target) { List
> solution = new ArrayList
>(); if (num.length < 4) { return solution; } Arrays.sort(num); for (int i = 0; i < num.length - 3; i++) { if (i > 0 && num[i] == num[i - 1]) { continue; // if current value is already tested as the first element, skip; } for (int j = i + 1; j < num.length - 2; j++) { if (j > i + 1 && num[j] == num[j - 1]) { continue; } // Do 2Sum int head = j + 1; int tail = num.length - 1; while (head < tail) { if (head > j + 1 && num[head] == num[head - 1]) { head++; continue; } if (tail < num.length - 1 && num[tail] == num[tail + 1]) { tail--; continue; } int sum = num[i] + num[j] + num[head] + num[tail]; if (sum == target) { solution.add(new ArrayList
(Arrays.asList(num[i], num[j], num[head], num[tail]))); head++; tail--; } else if (sum > target) { tail--; } else { head++; } } } } return solution; }}

转载于:https://www.cnblogs.com/zhangqieyi/p/4865496.html

你可能感兴趣的文章
Thread State
查看>>
Linux 动态链接库 - dll劫持
查看>>
Silverlight4 图片上传与位置标记
查看>>
AIC和BIC
查看>>
oracle生成主键
查看>>
秦旭光第一周任务
查看>>
java - day11 - OverRideTest
查看>>
Objective-C 内存管理之dealloc方法中变量释放处理
查看>>
iOS开发 viewWillAppear:(BOOL)animated真机调试的时候不执行了怎么办
查看>>
2019年高速免费
查看>>
实验三— —敏捷开发与XP实践
查看>>
POJ 1691 Painting A Board(DFS)
查看>>
Python【每日一问】15
查看>>
第二篇:库相关操作
查看>>
mongodb分页查询,排序
查看>>
C语言位运算+实例讲解(转)
查看>>
Fiddler 简介
查看>>
uva 10817 - Headmaster's Headache ( 状态压缩dp)
查看>>
c函数调用过程原理及函数栈帧分析
查看>>
[置顶] cuzy sdk之起源
查看>>