4Sum 解答
Question
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)
Solution
我们可以follow 3Sum的思路完成4Sum。
这里给出average time小于O(n3)的方法。
我们可以把4Sum拆解为2Sum的问题。首先,构造map,key为pair sum,value为list of pairs。然后,照着2Sum的方法,得出结果。
- public class Solution {
- public List<List<Integer>> fourSum(int[] nums, int target) {
- Arrays.sort(nums);
- Map<Integer, List<List<Integer>>> map = new HashMap<Integer, List<List<Integer>>>();
- Set<List<Integer>> result = new HashSet<List<Integer>>();
- for (int i = 0; i < nums.length; i++) {
- for (int j = i + 1; j < nums.length; j++) {
- int sum = nums[i] + nums[j];
- if (map.containsKey(target - sum)) {
- List<List<Integer>> pairs = map.get(target - sum);
- for (List<Integer> pair : pairs) {
- // m1 < m2
- int m1 = pair.get(0);
- int m2 = pair.get(1);
- // m3 < m4
- int m3 = i;
- int m4 = j;
- if (m1 == m3 || m1 == m4 || m2 == m3 || m2 == m4) {
- continue;
- } else {
- if (m2 < m3) {
- result.add(Arrays.asList(nums[m1], nums[m2], nums[m3], nums[m4]));
- } else if (m2 > m4) {
- result.add(Arrays.asList(nums[m1], nums[m3], nums[m4], nums[m2]));
- } else {
- result.add(Arrays.asList(nums[m1], nums[m3], nums[m2], nums[m4]));
- }
- }
- }
- }
- // Add current pair into map
- List<Integer> list = new ArrayList<Integer>();
- list.add(i);
- list.add(j);
- if (map.containsKey(sum)) {
- map.get(sum).add(list);
- } else {
- List<List<Integer>> tmp2 = new ArrayList<Lis<Integer>>();
- tmp2.add(list);
- map.put(sum, tmp2);
- }
- }
- }
- return new ArrayList<List<Integer>>(result);
- }
- }
4Sum 解答的更多相关文章
- leetcode — 4sum
import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * Source : https://oj.l ...
- LeetCode题目解答
LeetCode题目解答——Easy部分 Posted on 2014 年 11 月 3 日 by 四火 [Updated on 9/22/2017] 如今回头看来,里面很多做法都不是最佳的,有的从复 ...
- LeetCode算法题目解答汇总(转自四火的唠叨)
LeetCode算法题目解答汇总 本文转自<四火的唠叨> 只要不是特别忙或者特别不方便,最近一直保持着每天做几道算法题的规律,到后来随着难度的增加,每天做的题目越来越少.我的初衷就是练习, ...
- [LeetCode] 4Sum II 四数之和之二
Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are such t ...
- [LeetCode] 4Sum 四数之和
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...
- 精选30道Java笔试题解答
转自:http://www.cnblogs.com/lanxuezaipiao/p/3371224.html 都 是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我 ...
- 精通Web Analytics 2.0 (8) 第六章:使用定性数据解答”为什么“的谜团
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第六章:使用定性数据解答"为什么"的谜团 当我走进一家超市,我不希望员工会认出我或重新为我布置商店. 然而, ...
- 【字符编码】Java字符编码详细解答及问题探讨
一.前言 继上一篇写完字节编码内容后,现在分析在Java中各字符编码的问题,并且由这个问题,也引出了一个更有意思的问题,笔者也还没有找到这个问题的答案.也希望各位园友指点指点. 二.Java字符编码 ...
- spring-stutrs求解答
这里贴上applicationContext里的代码: <?xml version="1.0" encoding="UTF-8"?> <bea ...
随机推荐
- 为什么新建的管理员账号权限没有Administrator大?
Administrator是超级管理员,UAC不用确认,跟关了一样. 新建隶属于administrator组的用户,可以关掉UAC. 控制面板>系统和安全>操作中心>更改用户帐户控制 ...
- Quartz集成springMVC 的方案二(持久化任务、集群和分布式)
Quartz是一个开放源码项目,专注于任务调度器,提供了极为广泛的特性如持久化任务,集群和分布式任务等. Quartz核心是调度器,还采用多线程管理. 1.持久化任务:当应用程序停止运行时,所有调度信 ...
- C++中的重载、覆盖、隐藏
前几天面试时被问及C++中的覆盖.隐藏,概念基本答不上来,只答了怎么用指针实现多态,也还有遗漏.最终不欢而散.回来后在网上查找学习了一番,做了这个总结.其中部分文字借用了别人的博客,望不要见怪.引用的 ...
- pyqt搜索指定信息 github处找到,谢谢这位朋友的帮助了
def tabunqi(self,text): #第一遍添加之后,不提示,当第二次添加相同的数据时,就提示下 text1=str(text) items = self.downwid ...
- spark1.3的部署
1.下载源码,根据自己的环境编译,我这里下载的是spark1.3版本 本人采用sbt编译, SPARK_HADOOP_VERSION=2.5.2 SPARK_YARN=ture sbt/sbt ass ...
- Java IO教程 导读
Java IO是一套java 用来读写数据(输入和输出)的API.大部分程序都要处理一些输入,并有输入产生一些输出.Java为此提供了java.io包. 如果你浏览下java.io包,会对其中各样的类 ...
- (转)iOS7界面设计规范(2) - UI基础 - iOS应用解析
今天再来一发,然后结束掉周六的忙碌,去吃零食,还有冰啤酒:其实现在打嗝还有小龙虾味儿呢. 第二篇更多的是从技术的角度对iOS界面组成原理进行了简单的解析,篇幅很短,可稍作了解:更多关于iOS开发入门的 ...
- [置顶] Android安全机制分析
Android系统是基于Linux内核开发的,因此,Android系统不仅保留和继承了Linux操作系统的安全机制,而且其系统架构的各个层次都有独特的安全特性[2] . 1. Linux内核层安全机制 ...
- [Regular Expressions] Find Repeated Patterns
Regular Expression Quantifiers allow us to identify a repeating sequence of characters of minimum an ...
- MongoDB 和 mySql 的关系
1. mysql 和 MongoDb MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库. ...