给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。

示例1 :

输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]]

示例 2:

输入:nums = [] 输出:[]
示例 3:

输入:nums = [0] 输出:[]

首先将数组排序,按照值增长进行排序:

因为我们要同时找三个数,所以采取固定一个数(蓝),同时用双指针来查找另外两个数的方式。

现在已经找到了三个数,当然是计算其三值是否满足三元组。但是这里因为我们已经排好了序,如果固定下来的数(蓝)本身就大于 0,那三数之和必然无法等于 0。比如下面这种:

然后移动指针,如果和大于0,那就说明 right 的值太大,需要左移。如果和小于0,那就说明 left 的值太小,需要右移。如下图所示:

left 和 right 需要处理重复的情况,所以对于 left 和 left+1,以及 right 和 right-1,也需要做一下重复值的处理。

go代码:

func threeSum(nums []int) [][]int {//排序sort.Ints(nums)var arr [][]int//定义初始固定值以及指针,并进行循环for i := 0;i < len(nums);i++ {//过滤初始值大于0的情况if nums[i] > 0{break}left := i+1right := len(nums)-1//去掉重复项if i==0 || nums[i] != nums[i-1]{for left < right {var sumArr []intsumArr = append(sumArr,nums[i],nums[left],nums[right])sum := nums[i]+nums[left]+nums[right]if sum == 0 {arr = append(arr, sumArr)for left < right && nums[left] == nums[left+1] {left++}for left < right && nums[right] == nums[right-1] {right--}left++right--}else if sum < 0 {left++}else {right--}}}}return arr
}

php代码:

/*** @param Integer[] $nums* @return Integer[][]*/function threeSum($nums) {$res = [];sort($nums);$len = count($nums);for ($i = 0; $i < $len; $i++) {if ($nums[$i] > 0) continue;if ($i > 0 && $nums[$i -1] == $nums[$i]) continue;$front = $i + 1;$rear = $len - 1;while ($front < $rear) {$sum = $nums[$i] + $nums[$front] + $nums[$rear];if ($sum == 0) {$res[] = [$nums[$i], $nums[$front], $nums[$rear]];while ($front < $rear && $nums[$front] == $nums[$front + 1]) $front++;while ($front < $rear && $nums[$rear - 1] == $nums[$rear]) $rear--;$front++;$rear--;} elseif ($sum > 0) {$rear--;} else {$front++;}}}return $res;}

三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组(GO,PHP)相关推荐

  1. 【排序】 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。(java)

    给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组. 注意:答案中不可以包含重复的三 ...

  2. 绝对高效实现! 给你一个包含n个整数的数组nums,判断nums是否存在三个元素a,b,c使得a+b+c =0...

    所有实现代码均使用JAVA letcode上面有个算法题,贴原图 先分析一下: 第一个条件,a+b+c = 0,这个好办,最简单的就是循环三次,把所有情况都过一篇就可得到所有结果, 第二个条件,满足条 ...

  3. python 三数之和

    三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组.注意:答案中不可以包含 ...

  4. 15. 三数之和 golang

    15. 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意:答案中不 ...

  5. leetcode系列--15.三数之和

    leetcode 第15题 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三 ...

  6. 【LeetCode15】三数之和

    三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意:答案中不可以包含 ...

  7. LeetCode15. 三数之和 16. 最接近的三数之和

    LeetCode15. 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组 ...

  8. 数组计算两数之和,三数之和,四数之和

    这种计算几个数据之和的题目, 一般分为 在同一个数组中计算几个数之和等于某一个值. 还有一种是给几个数组,每个数组中取一个数据,让你算几个数之和等于某一个值. 一般情况下,第二中的难度会更大,因为去重 ...

  9. 算法-----三数之和等于0

    三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件 且不重复的三元组. 注意:答案中不可以包含重 ...

最新文章

  1. DW php创建站点
  2. 海康sdk返回yv12
  3. date比较大小 mybatis_MyBatis Sqlserver日期比较
  4. JAVA反射使用手记
  5. macos模拟器_苹果芯补完计划,iOS终将回归mac OS?
  6. 如何添加评论_如何运用运镜+转场让视频更酷炫
  7. 悟道魔兽世界,《榜样魔兽》横空出世
  8. WebsResponse
  9. python上的表白代码_用Python实现表白代码
  10. QQ聊天 代码 输入表情
  11. 【活动更新】第一届Openbravo社区早餐会将与5/28在上海举办
  12. Shiro(三)——三种不同的登录方式、RememberMe登录、Shiro 授权、其他配置(配置注销后的跳转页面、处理 JsessionID)
  13. windows server 2016云主机如何挂载云硬盘
  14. 二阶魔方入门玩法教程
  15. CentOS7.4离线安装Openssh7.9p1
  16. 计算机基础学到了哪些知识,计算机基础学习心得
  17. DHCP服务的配置与使用
  18. linux 用chomd修改权限时报:只读文件系统,linux下修改文件夹权限提示chmod: 更改xx 的权限: 只读文件系统...
  19. C语言剖析OC的rangeOfString方法
  20. 验证码显示不出来的问题

热门文章

  1. JavaSE基础知识回顾
  2. 【Android智能硬件开发】【011】安卓串口转USB
  3. 58到家数据库30条军规解读(58沈剑)
  4. three.js中坐标系转换以及camera的position、lookAt与up属性理解
  5. 神秘的程序员头像包(附口罩版)第一发
  6. 【资讯】2017年乌镇互联网大会,互联网大佬们齐聚首
  7. 多路径路由算法选择(2)——回顾传统的动态路由协议(RIP、OSPF、BGP、IGRP、EIGRP、IS-IS)
  8. android 单双层桌面切换
  9. 利用3D面部表情及口语语言的多模态方法进行抑郁症智能化识别
  10. LDP协议的相关内容