3-sum

题目描写叙述:

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.

题目要求:

  • 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.

每一个三元组内的元素是按非递减的顺序存放的,而且结果中要求不含有同样的集合。

解法:首先是排序,接着要求是不含有同样的集合,显然能够使用set,可是以下的代码所有都避免使用set。

以下一共使用了3种方法:

法一:DFS,复杂度高,而且在非常小的样例上都超时。

法二:枚举全部的2-sum和。再在数组中查找是否存在另外一个数,使得该3个数的和为0.

此法不须要使用set,直接就能够得到结果,可是要注意避免反复计算,例如以下两点。


注1:上述的枚举2-sum时,对于剩下的那个数仅仅须要在 “下标都大于前两者时”进行。例如以下例:

在上图中,当枚举到i和j时,另外一个元素仅仅须要在  图示的 k  范围内枚举就可以。

注2:假设数组中有大量的反复元素,那么i和j(保持有A[i] == A[j])就仅仅须要考虑一次就可以。

例如以下例:

上图中,i 和 j仅仅须要考虑一次, 当 j 移动到 j‘ 的时候,是不须要考虑的,由于与前面的 i 和 j  是反复的。

代码例如以下:

时间复杂度为: n^2(logn)
法三:因为2-sum在数组有序的情况下我们是能够O(n)的时间来解决的,于是直接使用已有的2-sum的代码,代码例如以下:

leetcode -- 3 sum相关推荐

  1. 【同113】LeetCode 129. Sum Root to Leaf Numbers

    LeetCode 129. Sum Root to Leaf Numbers Solution1:我的答案 二叉树路径和问题,类似113 /*** Definition for a binary tr ...

  2. LeetCode Path Sum III(前缀和)

    问题: 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二叉树 ...

  3. LeetCode Combination Sum IV(动态规划)

    问题:给出一个数组nums和目标数target,问有多少组合形式 思路:用dp(i)表示目标数target的组合数.则有状态转移关系为dp(i)=sum(dp(i-nums[j])),其中i>= ...

  4. LeetCode Range Sum Query - Mutable(树状数组、线段树)

    问题:给出一个整数数组,求出数组从索引i到j范围内元素的总和.update(i,val)将下标i的数值更新为val 思路:第一种方式是直接根据定义,计算总和时直接计算从i到j的和 第二种方式是使用树状 ...

  5. LeetCode Two Sum III - Data structure design

    原题链接在这里:https://leetcode.com/problems/two-sum-iii-data-structure-design/ 题目: Design and implement a ...

  6. LeetCode Subarray Sum Equals K

    原题链接在这里:https://leetcode.com/problems/subarray-sum-equals-k/description/ 题目: Given an array of integ ...

  7. leetcode 907. Sum of Subarray Minimums | 907. 子数组的最小值之和(单调栈)

    题目 https://leetcode.com/problems/sum-of-subarray-minimums/ 题解 单调栈问题.参考左神算法课:https://ke.qq.com/webcou ...

  8. leetcode 371. Sum of Two Integers | 371. 两整数之和(补码运算)

    题目 https://leetcode.com/problems/sum-of-two-integers/ 题解 根据 related topics 可知,本题考察二进制运算. 第一次提交的时候,没想 ...

  9. [Leetcode]Two sum(两数之和)系列总结

    Two sum 题目 Given an array of integers, return indices of the two numbers such that they add up to a ...

最新文章

  1. [短文速读] 重载有暗坑,JVM是如何执行方法的
  2. puppet自动化运维之资源关系
  3. typedef的作用
  4. wxWidgets:wxArrayString类用法
  5. 基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多
  6. JAVA之运算符优先级
  7. 事故现场:MySQL 中一个双引号的错位引发的血案
  8. android隐式广播和显式广播是什么,在Android8.0上突破隐式广播的限制
  9. spring aop advice
  10. Python绘制分形树(一)
  11. BP,RNN 和 LSTM暨《Supervised Sequence Labelling with Recurrent Neural Networks-2012》阅读笔记
  12. GPS数据矢量化JAVA_算法 – acosf()的精确矢量化实现
  13. 苹果提示:“未信任的企业开发者”
  14. 换手机了备忘录怎么恢复?专家为你解答数据恢复问题
  15. 一文读懂数据中台技术架构
  16. 水晶报表 子报表 的应用
  17. 初始化Linux数据盘(fdisk)
  18. HTML5网页设计基础——精美电商悬浮窗
  19. 服务器与普通电脑之间的区别是什么?
  20. 走遍美国 —— 各州及其别名

热门文章

  1. Apache,Nginx,Lighttpd分别使用X-sendfile功能提升文件下载性能
  2. 从奥运订票系统说起——谈FastCGI 与IT 架构
  3. Linux动态库(.so)搜索路径
  4. wireshark的使用教程--用实践的方式帮助我们理解TCP/IP中的各个协议是如何工作的
  5. Asp.net 2.0 C#实现压缩/解压功能
  6. java微信菜单获取openid_微信二次开发点击菜单openId的获取
  7. docker mysql 生产环境_Docker构建MySQL环境
  8. 账号管理工具_短视频矩阵管理工具,多个账号同步管理
  9. python栈溢出_Python栈溢出【新手必学】
  10. Java学习总结:31(StringBuffer类)