题目

Given an array nums of n integers and an integer target, are there elements a, b, c, and d in nums such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.

思路

可以和之前3Sum的思路一样,采用快排,时间复杂度为O(N^3),但是很容易超时,所以这里采用另外一种方法,哈希表用空间换时间,以增加空间复杂度的代价来降低时间复杂度。首先建立一个字典dict,字典的key值为数组中每两个元素的和,每个key对应的value为这两个元素的下标组成的元组,元组不一定是唯一的。
如对于num=[1,2,3,2]来说,dict={3:[(0,1),(0,3)], 4:[(0,2),(1,3)], 5:[(1,2),(2,3)]}。
这样就可以检查target-key这个值在不在dict的key值中,如果target-key在dict中并且下标符合要求,那么就找到了这样的一组解。由于需要去重,这里选用set()类型的数据结构,即无序无重复元素集。最后将每个找出来的解(set()类型)转换成list类型输出即可。

代码

class Solution:def fourSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[List[int]]"""numlen,res,adict = len(nums),set(),{}# 如果输入数字不够直接返回空列表if numlen < 4:return []# 构建哈希表,如对于num=[1,2,3,2]来说,dict={3:[(0,1),(0,3)], 4:[(0,2),(1,3)], 5:[(1,2),(2,3)]}nums.sort()for i in range(numlen):for j in range(i+1,numlen):if nums[i]+nums[j] not in adict:adict[nums[i]+nums[j]] = [(i,j)]else:adict[nums[i]+nums[j]].append((i,j))for i in range(numlen):for j in range(i+1,numlen-2):digit = target - nums[i] - nums[j]if digit in adict:for item in adict[digit]:if item[0] > j:res.add((nums[i],nums[j],nums[item[0]],nums[item[1]]))return [list(k) for k in res]

运行结果

282 / 282 test cases passed.
Status: Accepted
Runtime: 160 ms

【18/M/python】4Sum相关推荐

  1. 【莫烦Python】Numpy教程

    目录 前言 1.numpy属性 2.numpy的array创建 3.numpy的基础运算 4.numpy的基础运算2 5.numpy的索引 6.numpy的array合并 7.numpy的array分 ...

  2. 【莫烦Python】Pandas教程

    目录 前言 1.Pandas vs Numpy 2.基本介绍 3.选择数据 4.设置值 5.处理丢失的数据 6.pandas导入导出 7.pandas合并concat 8.pandas合并merge ...

  3. 【莫烦Python】Matplotlib Python画图教程

    目录 前言 1.基本使用 1.1 基本用法 1.2 figure图像 1.3 设置坐标轴1 1.4 设置坐标轴2 1.5 Legend图例 1.6 Annotation标注 1.7 tick能见度 2 ...

  4. 【计算机二级Python】模拟试卷第6套选择题

    相关链接 [计算机二级Python]考试攻略及资料汇总 [计算机二级Python]模拟试卷第1套选择题 [计算机二级Python]模拟试卷第2套选择题 [计算机二级Python]模拟试卷第2套选择题 ...

  5. 【计算机二级Python】主观题(总结版)

    二级备赛系列博文 [计算机二级Python]客观题(总结版) [计算机二级Python]主观题(总结版) [计算机二级Python]易忘知识点总结 [计算机二级Python]阶段性总结版 一.小知识什 ...

  6. 【计算机二级Python】模拟试卷第7套选择题

    相关链接 [计算机二级Python]考试攻略及资料汇总 [计算机二级Python]模拟试卷第1套选择题 [计算机二级Python]模拟试卷第2套选择题 [计算机二级Python]模拟试卷第2套选择题 ...

  7. 【计算机二级Python】模拟试卷第3套选择题

    相关链接 [计算机二级Python]考试攻略及资料汇总 [计算机二级Python]模拟试卷第1套选择题 [计算机二级Python]模拟试卷第2套选择题 [计算机二级Python]模拟试卷第2套选择题 ...

  8. tkinter message_【莫烦Python】Tkinter 做简单的窗口视窗lt;学习笔记(2)gt;

    接(1) 还有五个苹果:[莫烦Python]Tkinter 做简单的窗口视窗<学习笔记>​zhuanlan.zhihu.com 登录窗口小例子(pickle存取) import

  9. 【循序渐进学Python】Python中的循环(二)——while循环与嵌套

    [循序渐进学Python]Python中的循环--while循环与嵌套 while循环(在给定的判断条件为 True 时执行循环体,False退出循环体) 当满足一定条件的时候才循环,具体循环多少次没 ...

最新文章

  1. 针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言477-486条如下:
  2. [转] log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析
  3. OpenCV HDF创建,写入和读取数据集
  4. JS常用的表单验证(数字、长度,汉字,邮箱,手机号,身份证等)
  5. Java命令行界面(第20部分):JSAP
  6. 性能测试界“网红”云性能测试服务,了解一下?
  7. linux处理除零异常,linux – 如何在x86程序集中使用中断来触发被零除错误异常?...
  8. 初探 Go 的编译命令执行过程
  9. 第七节:SpringBoot高级属性配置二
  10. PHP 设计模式之工厂模式 (静态工厂模式)
  11. 【智慧城市】-GIS数据获取SHP建筑数据获取总结
  12. matlab求动力学模型,MATLAB/Simulink动力学系统建模与仿真(带目录)_IT教程网
  13. [深度学习] ImageAI库使用笔记
  14. QODBC查询Oracle中文乱码问题
  15. c语言 long double输出,printf和long double
  16. 电子发票撤销 java_已确认的发票如何撤销
  17. 最简单的内网穿透教程
  18. Android Camera使用OpenGL ES 2.0和GLSurfaceView对预览进行实时二次处理(黑白滤镜)
  19. 计算机培训软文,软文诊断62期: 学写软文标题,只需懂电脑开机即可
  20. Android移动应用设计与开发(第2版)——基于Android Studio开发环境 胡敏 黄宏程 李冲编著

热门文章

  1. selenium控制浏览器获取数据(java 版本)
  2. Mac下设置idea的代码提示快捷键
  3. oracle and not 的用法,[ORACLE]详解not in与not exists的区别与用法(not in的性能并不差!)...
  4. -XX:+PrintGCTimeStamps 打印CG发生的时间戳
  5. 浅层神经网络回归预测,基于MATLAB。 模型包括BPNN,极限学习机(ELM)和Elman网络
  6. 前端规范 - 前端项目开发规范
  7. matlab 角度 弧度
  8. MSP430X1XX系列硬件乘法器,比较器,flash讲解
  9. 景观设计主题命名_景观设计主题
  10. org.springframework.hateoas.config.HateoasConfiguration required a single bean, but 15 were found: