[LeetCode]#13 3sum
一、题目
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
- Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
- The solution set must not contain duplicate triplets.
For example, given array S = {-1 0 1 2 -1 -4},A solution set is:(-1, 0, 1)(-1, -1, 2) 二、思路我的思路一直很简单,当初在做2Sum的时候,就是把求和问题变成了一个查找问题,定下一个数a,去找target-a在不在剩余的数里。3Sum也这么做,但是效率明显低多了。而且这题让输出所有可能的答案组合,牵扯到重复的问题。做法还是按照变求和为查询,定下a,b,找target-(a+b),唯一做的优化就是用哈希表存下已有的(a,b),这样不至于做重复的查找。但是这样毕竟不是办法,以后做4sum就要4层循环了,不是个事。看别人的答案,是从两边往中间找,这个挺好的。准备在3Sum Closet里试一下这种方法。 三、代码
1 class Solution: 2 # @param {integer[]} nums 3 # @return {integer[][]} 4 def threeSum(self, nums): 5 nums.sort() 6 passed_list = [] 7 result = [] 8 record = {} 9 result_dict = {} 10 if len(nums) < 3: 11 return [] 12 else: 13 for i in range(len(nums)): 14 for j in range(i + 1, len(nums)): 15 a = nums[i] 16 b = nums[j] 17 if (a, b) in record: 18 pass 19 else: 20 record[(a, b)] = 0 21 target = 0 - a - b 22 if target in nums[j + 1:]: 23 passed_list.append(a) 24 passed_list.append(b) 25 passed_list.append(target) 26 if str(passed_list) in result_dict: 27 passed_list = [] 28 pass 29 else: 30 result.append(passed_list) 31 result_dict[str(passed_list)] = 0 32 passed_list = [] 33 return result
四、总结
准备把n-sum这类问题全部做完,然后总结一下这类题的规律。
转载于:https://www.cnblogs.com/breada/p/4761906.html
[LeetCode]#13 3sum相关推荐
- LeetCode 923. 3Sum With Multiplicity
题目地址: 做这道题前需要先做:LeetCode 15. 3Sum–Java,Python解法 题目地址:3Sum With Multiplicity - LeetCode Given an inte ...
- LeetCode 13. Roman to Integer
问题链接 LeetCode 13. Roman to Integer 题目解析 将罗马数字转换成普通数字. 解题思路 先简单了解一下什么是罗马数字. 基本字符:I,V,X,L,C,D,M 相应的阿拉伯 ...
- LeetCode 16 3Sum Closest(最接近的3个数的和)
翻译 给定一个有n个整数的数组S,找出S中3个数,使其和等于一个给定的数,target.返回这3个数的和,你可以假定每个输入都有且只有一个结果.例如,给定S = {-1 2 1 -4},和target ...
- c语言罗马数字换成整数,leetcode 13 罗马数字转整数 C语言
leetcode 13 罗马数字转整数 原题 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 ...
- Python LeetCode(13.罗马数字转整数)
Python LeetCode(13.罗马数字转整数) 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M ...
- Leetcode 13.罗马数字转整数
Leetcode 13.罗马数字转整数 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 100 ...
- LeetCode——15. 3Sum
一.题目链接:https://leetcode.com/problems/3sum/ 二.题目大意: 3和问题是一个比较经典的问题,它可以看做是由2和问题(见http://www.cnblogs.co ...
- 【leetcode】3Sum
3Sum Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find a ...
- LeetCode——16. 3Sum Closest
一.题目链接:https://leetcode.com/problems/3sum-closest/ 二.题目大意: 给定一个数组A和一个目标值target,要求从数组A中找出3个数来,使得这三个数的 ...
最新文章
- java中异常回收_理解Java垃圾回收
- 总结django form
- python scrapy同时执行spiders多个爬虫
- 手把手教你实现机器学习SVM算法
- Single Number III
- final、finally、finalize 区别
- Java架构师成长之道之计算机组成原理概述篇
- 一元非线性方程求根的算法——二分法/牛顿迭代法
- 路在何方 路在脚下 -- !!
- easyui datagrid deleteRow(删除行)的BUG或者updateRow值更新了不展示问题
- 藤子不二雄博物馆之行
- 2022年茶艺师(高级)考试题及模拟考试
- java和scala代码可以混合编写吗_IDEA实现Java与Scala代码混合开发
- Spring实战笔记——(1)Spring之旅(上)
- 可以作为艺术作品欣赏的CT三维重建技术。
- c++ Qt5学习笔记 2021-1-21(文件系统QFile、QFileInfo、QDir、QFileSystemWatcher等使用,读取文本显示乱码,QDataStream二进制字节流读写)
- Shader学习23——描边+辉光
- 如何在cmd中,使用cd进入指定文件目录
- C#生成电子印章源码
- 正则_验证文本框输入的姓名是否规范(包含生僻字,不包含中文符号与其他字符)...