三元组相加获得target
来源:互联网 发布:特效文字制作软件 编辑:程序博客网 时间:2024/06/05 21:10
三元组相加获得target
3Sum
- 给定一个数组,选择三个元素相加,结果为target,找出所有符合的三元组
- 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: The solution set must not contain duplicate triplets.
For example, given array S = [-1, 0, 1, 2, -1, -4]
example 1
input: [-1, 0, 1, 2, -1, -4]A solution set is:[ [-1, 0, 1], [-1, -1, 2]]
思路
- 乱序数组,需要找到所有组合,需要三层循环,复杂度为O(n³)。
- 可以先排序,排序后只需要两层循环,复杂度为O(n²)。第一层循环遍历所有元素,第二层循环由于数组已经排序,只需要头尾两个指针像中间靠拢,一但三个元素相加为target,则添加此三元组,然后继续像中间靠拢扫描。
- 需要避免重复的三元组被加入
代码
class Solution(object): def threeSum(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ nums.sort() ret = [] for i in range(len(nums) - 2): # 避免重复 if i > 0 and nums[i] == nums[i-1]: continue j, k = i + 1, len(nums) - 1 while j < k: if nums[i] + nums[j] + nums[k] == 0: ret.append([nums[i], nums[j], nums[k]]) j += 1 k -= 1 # 避免重复 while j < k and nums[j] == nums[j - 1]: j += 1 while j < k and nums[k] == nums[k + 1]: k -= 1 elif nums[i] + nums[j] + nums[k] < 0: j += 1 else: k -= 1 return ret
本题以及其它leetcode题目代码github地址: github地址
阅读全文
0 0
- 三元组相加获得target
- 三元组相加获得结果最接近target
- 四元组相加获得target
- 稀疏矩阵三元组的相加相乘运算
- 矩阵转置+矩阵相加(三元组)
- 利用稀疏矩阵的“三元组表”存储结构,实现两个矩阵的相加。
- 矩阵相加的算法(存储结构为三元组表)
- 三元组顺序结构实现稀疏矩阵相加,行序优先(Java语言描述)
- 稀疏矩阵的三元组表示的实现及应用(矩阵相加)
- 不重复打印排序数组中相加和为给定值的所有二元三元组
- 动态稀疏矩阵的两个三元组进行相加的算法
- 稀疏矩阵的三元组表示的实现及应用(2)——采用三元组存储稀疏矩阵,设计两个稀疏矩阵相加的运算算法
- 三元组
- 笔试面试算法经典--打印数组中相加和为给定值的二元组及三元组(Java)
- 第九周 项目3 稀疏矩阵的三元组表示的实现及应用(矩阵相加)
- 数组与矩阵---不重复打印排序数组中相加和为给定值的所有二元组和三元组
- 第九周项目3--稀疏矩阵的三元组表示的实现及应用--(2)两个稀疏矩阵相加的运算
- 数据结构之三元组
- SERVLETJSP Unit08: 过滤器、监听器
- ELK学习1_开源分布式搜索平台ELK+Redis+Syslog-ng实现日志实时搜索
- [leetcode]160. Intersection of Two Linked Lists
- Thinking in java-32 Iterable & Iterator Inteface
- crack the coding interview 数组与字符串 1.5
- 三元组相加获得target
- Android 性能优化之MAT分析内存泄漏
- 润乾报表DQL组件如何为查询字段的检索条件设置编辑风格
- 转载:android适配屏幕
- h5新增的标签
- MP4容器解析
- OpenPose
- Android基于环信开发的即时通讯APP
- 使用TinyXML创建xml文件