三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组(GO,PHP)
给你一个包含 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)相关推荐
- 【排序】 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。(java)
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组. 注意:答案中不可以包含重复的三 ...
- 绝对高效实现! 给你一个包含n个整数的数组nums,判断nums是否存在三个元素a,b,c使得a+b+c =0...
所有实现代码均使用JAVA letcode上面有个算法题,贴原图 先分析一下: 第一个条件,a+b+c = 0,这个好办,最简单的就是循环三次,把所有情况都过一篇就可得到所有结果, 第二个条件,满足条 ...
- python 三数之和
三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组.注意:答案中不可以包含 ...
- 15. 三数之和 golang
15. 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意:答案中不 ...
- leetcode系列--15.三数之和
leetcode 第15题 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三 ...
- 【LeetCode15】三数之和
三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意:答案中不可以包含 ...
- LeetCode15. 三数之和 16. 最接近的三数之和
LeetCode15. 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组 ...
- 数组计算两数之和,三数之和,四数之和
这种计算几个数据之和的题目, 一般分为 在同一个数组中计算几个数之和等于某一个值. 还有一种是给几个数组,每个数组中取一个数据,让你算几个数之和等于某一个值. 一般情况下,第二中的难度会更大,因为去重 ...
- 算法-----三数之和等于0
三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件 且不重复的三元组. 注意:答案中不可以包含重 ...
最新文章
- DW php创建站点
- 海康sdk返回yv12
- date比较大小 mybatis_MyBatis Sqlserver日期比较
- JAVA反射使用手记
- macos模拟器_苹果芯补完计划,iOS终将回归mac OS?
- 如何添加评论_如何运用运镜+转场让视频更酷炫
- 悟道魔兽世界,《榜样魔兽》横空出世
- WebsResponse
- python上的表白代码_用Python实现表白代码
- QQ聊天 代码 输入表情
- 【活动更新】第一届Openbravo社区早餐会将与5/28在上海举办
- Shiro(三)——三种不同的登录方式、RememberMe登录、Shiro 授权、其他配置(配置注销后的跳转页面、处理 JsessionID)
- windows server 2016云主机如何挂载云硬盘
- 二阶魔方入门玩法教程
- CentOS7.4离线安装Openssh7.9p1
- 计算机基础学到了哪些知识,计算机基础学习心得
- DHCP服务的配置与使用
- linux 用chomd修改权限时报:只读文件系统,linux下修改文件夹权限提示chmod: 更改xx 的权限: 只读文件系统...
- C语言剖析OC的rangeOfString方法
- 验证码显示不出来的问题