【18/M/python】4Sum
题目
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相关推荐
- 【莫烦Python】Numpy教程
目录 前言 1.numpy属性 2.numpy的array创建 3.numpy的基础运算 4.numpy的基础运算2 5.numpy的索引 6.numpy的array合并 7.numpy的array分 ...
- 【莫烦Python】Pandas教程
目录 前言 1.Pandas vs Numpy 2.基本介绍 3.选择数据 4.设置值 5.处理丢失的数据 6.pandas导入导出 7.pandas合并concat 8.pandas合并merge ...
- 【莫烦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 ...
- 【计算机二级Python】模拟试卷第6套选择题
相关链接 [计算机二级Python]考试攻略及资料汇总 [计算机二级Python]模拟试卷第1套选择题 [计算机二级Python]模拟试卷第2套选择题 [计算机二级Python]模拟试卷第2套选择题 ...
- 【计算机二级Python】主观题(总结版)
二级备赛系列博文 [计算机二级Python]客观题(总结版) [计算机二级Python]主观题(总结版) [计算机二级Python]易忘知识点总结 [计算机二级Python]阶段性总结版 一.小知识什 ...
- 【计算机二级Python】模拟试卷第7套选择题
相关链接 [计算机二级Python]考试攻略及资料汇总 [计算机二级Python]模拟试卷第1套选择题 [计算机二级Python]模拟试卷第2套选择题 [计算机二级Python]模拟试卷第2套选择题 ...
- 【计算机二级Python】模拟试卷第3套选择题
相关链接 [计算机二级Python]考试攻略及资料汇总 [计算机二级Python]模拟试卷第1套选择题 [计算机二级Python]模拟试卷第2套选择题 [计算机二级Python]模拟试卷第2套选择题 ...
- tkinter message_【莫烦Python】Tkinter 做简单的窗口视窗lt;学习笔记(2)gt;
接(1) 还有五个苹果:[莫烦Python]Tkinter 做简单的窗口视窗<学习笔记>zhuanlan.zhihu.com 登录窗口小例子(pickle存取) import
- 【循序渐进学Python】Python中的循环(二)——while循环与嵌套
[循序渐进学Python]Python中的循环--while循环与嵌套 while循环(在给定的判断条件为 True 时执行循环体,False退出循环体) 当满足一定条件的时候才循环,具体循环多少次没 ...
最新文章
- 针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言477-486条如下:
- [转] log4j-over-slf4j与slf4j-log4j12共存stack overflow异常分析
- OpenCV HDF创建,写入和读取数据集
- JS常用的表单验证(数字、长度,汉字,邮箱,手机号,身份证等)
- Java命令行界面(第20部分):JSAP
- 性能测试界“网红”云性能测试服务,了解一下?
- linux处理除零异常,linux – 如何在x86程序集中使用中断来触发被零除错误异常?...
- 初探 Go 的编译命令执行过程
- 第七节:SpringBoot高级属性配置二
- PHP 设计模式之工厂模式 (静态工厂模式)
- 【智慧城市】-GIS数据获取SHP建筑数据获取总结
- matlab求动力学模型,MATLAB/Simulink动力学系统建模与仿真(带目录)_IT教程网
- [深度学习] ImageAI库使用笔记
- QODBC查询Oracle中文乱码问题
- c语言 long double输出,printf和long double
- 电子发票撤销 java_已确认的发票如何撤销
- 最简单的内网穿透教程
- Android Camera使用OpenGL ES 2.0和GLSurfaceView对预览进行实时二次处理(黑白滤镜)
- 计算机培训软文,软文诊断62期: 学写软文标题,只需懂电脑开机即可
- Android移动应用设计与开发(第2版)——基于Android Studio开发环境 胡敏 黄宏程 李冲编著
热门文章
- selenium控制浏览器获取数据(java 版本)
- Mac下设置idea的代码提示快捷键
- oracle and not 的用法,[ORACLE]详解not in与not exists的区别与用法(not in的性能并不差!)...
- -XX:+PrintGCTimeStamps 打印CG发生的时间戳
- 浅层神经网络回归预测,基于MATLAB。 模型包括BPNN,极限学习机(ELM)和Elman网络
- 前端规范 - 前端项目开发规范
- matlab 角度 弧度
- MSP430X1XX系列硬件乘法器,比较器,flash讲解
- 景观设计主题命名_景观设计主题
- org.springframework.hateoas.config.HateoasConfiguration required a single bean, but 15 were found: